winform開発では消費時間操作をカプセル化して非同期実行(.net 4.0)

4599 ワード

・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 =  

        }

 
これで非常に呼び出しやすくなり、何か不適切な点があるかどうか分かりません.皆さんのご指導を願います.