using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading; namespace POSV.Utils { public class BackgroundDoWorkEventArgs { public object Parameter { get; set; } public BackgroundWorker BackgroundWorker { get; set; } } public static class BackgroundWorkerExtension { /// /// 构造BackgroundWorker对象 /// /// 待处理的事件 /// 通知事件 /// 结束事件 /// public static BackgroundWorker InitNewBackgroundWorker(DoWorkEventHandler doWorkEvent = null, ProgressChangedEventHandler progressChangedEvent = null, RunWorkerCompletedEventHandler runWorkerCompletedEvent = null) { var bw = new BackgroundWorker(); bw.RegisterDoWork(doWorkEvent); bw.RegisterProgressChanged(progressChangedEvent); bw.RegisterRunWorkerCompleted(runWorkerCompletedEvent); return bw; } /// /// 执行BackgroundWorker /// /// /// public static void RunWorkerAsyncExt(this BackgroundWorker bw, object param = null) { //只有在BackgroundWorker空闲的时候才执行 if (!bw.IsBusy) { bw.RunWorkerAsync(new BackgroundDoWorkEventArgs { Parameter = param, BackgroundWorker = bw }); } } /// /// 取消BackgroundWorker的执行 /// /// public static void CancelAsyncExt(this BackgroundWorker bw) { bw.CancelAsync(); } /// /// 注册DoWork事件 /// /// /// public static void RegisterDoWork(this BackgroundWorker bw, DoWorkEventHandler doWorkEvent = null) { bw.WorkerSupportsCancellation = true; //默认实现 if (doWorkEvent == null) { doWorkEvent = (sender, e) => { }; } bw.DoWork += doWorkEvent; } /// /// 注册ProgressChanged事件 /// /// /// public static void RegisterProgressChanged(this BackgroundWorker bw, ProgressChangedEventHandler progressChangedEvent = null) { bw.WorkerReportsProgress = true; //默认实现 if (progressChangedEvent == null) { progressChangedEvent = (sender, e) => { }; } bw.ProgressChanged += progressChangedEvent; } /// /// 注册RunWorkerCompleted事件 /// /// /// public static void RegisterRunWorkerCompleted(this BackgroundWorker bw, RunWorkerCompletedEventHandler runWorkerCompletedEvent = null) { if (runWorkerCompletedEvent == null) { runWorkerCompletedEvent = (sender, e) => { }; } bw.RunWorkerCompleted += runWorkerCompletedEvent; } } }