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 = 之类的操作

        }

 

这样就非常方便调用了, 不知道有没有什么不当之处。望大家指导。

你可能感兴趣的:(WinForm)