winform 开发中 把耗时操作 封装起来 异步执行(.net 4.0)
.先定义一个 BackgroundTask.cs 代码如下:
1 public class BackgroundTask 2 { 3 private static WaitDialogForm LoadingDlgForm = null; 4 5 public static void BackgroundWork(Action<object> action, object obj) 6 { 7 using (BackgroundWorker bw = new BackgroundWorker()) 8 { 9 bw.RunWorkerCompleted += (s, e) => 10 { 11 LoadingDlgForm.Close(); 12 LoadingDlgForm.Dispose(); 13 }; 14 15 bw.DoWork += (s, e) => 16 { 17 try 18 { 19 Action<object> a = action; 20 a.Invoke(obj); 21 } 22 catch { } 23 }; 24 25 bw.RunWorkerAsync(); 26 27 LoadingDlgForm = new WaitDialogForm("正在加载中......", "信息提示"); 28 } 29 } 30 }
然后再需要加载耗时操作的地方,调用该类
大概如下:
private void loadData() { BackgroundTask.BackgroundWork(getData, null); } private void getData(object obj) { //这里执行耗时操作 的代码 譬如,加载远程数据之类,还有绑定数据到UI,比如this.gridview.datasource = 之类的操作 }
这样就非常方便调用了, 不知道有没有什么不当之处。望大家指导。