私は、アプリケーションのデータベースが増加するにつれて、結果を返すのにかかる時間も増加していることに気付きました。最初は、データソースを返す時間がそれほど短かったため、これはごくわずかでした。バックグラウンドワーカーにとって共通の方法はありますか?
私は一時的にUIを数秒間応答しないようにしていますが、これらのタスクを実行するにはbackground workers
を作成したいと思います。
これらを作成する際の問題は、バックグラウンドワーカーが必要な約9つのボタンがあり、DLL内で異なるメソッドを呼び出すことです。バックグラウンドワーカー向けのAPIを使用してこれらのバックグラウンドワーカーを作成するための共通の方法を使用する方法はありますか、または各ボタンに対応するEnum
を作成して、バックグラウンドワーカーを構築するメソッドによって取り込まれるパラメータです。つまり、単純なswitch
を使用して、私が選んだDLLのどのメソッドを実行することができますか?
サンプルコード:
void bg_DoWorkImports(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
e.Result = EngineBllUtility.GetNotImportedFiles(connectionString);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void bg_RunWorkerCompletedImports(object sender, RunWorkerCompletedEventArgs e)
{
DataSet temp = (DataSet)e.Result;
if (e.Result != null)
{
importFileGridView.DataSource = temp.Tables[0];
}
}
.NET 4を使用していますか? TPLは、このタイプのシナリオでBackgroundWorkerに代わる素晴らしい方法です... –
残念なことに.NET 3.5 – ediblecode
TPLを取得するので、Rxフレームワークへの依存はオプションになりますか? http://msdn.microsoft.com/en-us/data/gg577610 –