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