2011-10-07 9 views
1

.NETで長時間実行されるアクションを実行するライブラリ/フレームワークはありますか?このような何かを探して:Execute()が呼び出されると.NET/Windows Formsで長期実行アクションを実行するためのライブラリ?

private void button1_Click(...) 
{ 
    LongActionRunner.Execute((ref int total, ref int done) => { 
    // i know it's not thread-safe 
    total = 100; 
    for(var i = 0; i <= 100; ++i) { 
     done = i; 
     Thread.Sleep(100); // slow 
    } 
    }); 
} 

、私はプログレスバーでウィンドウを表示する必要があります。アクションがスローされると、エラーメッセージなどが表示されます。

既存のソリューションはありますか?

答えて

3

BackgroundWorkerを使用できます。これは特にあなたが提示したシナリオのためのものです。 BackgroundWorkerを使用して進行状況バーを実装する方法のチュートリアルについては、hereを参照してください。

+0

プログレスバーやエラー処理などはどうですか?自分でコードを作成したくないだけです。 – agibalov

+0

あなたはまだプログレスバーを追加する必要がありますが、バックグラウンドワーカーには 'progressChanged'というイベントがあり、プログレスバーは直進します – jle

+0

@ loki2302 - ソリューションに関わらず、自分自身ですべてをコーディングする必要があります。 –

0

BackroundWorkerはスレッドプールスレッドを使用するため、比較的(1秒以下の)作業単位でのみ使用してください。あなたの操作がそれよりも長くかかる場合は、スレッドを作成する必要があります。

私は、商用プロジェクトでこれを書いていると思いますが、私はオープンソースの解決策についてはわかりません。ユーザーがbutton1を2回押して再入力を行わないようにするには、プログレスバー付きのダイアログを表示する必要があることに同意します。あなたが言うように、あなたはまた、エラーとキャンセルを処理する必要があります。

+0

「1秒以内」のクレームの引用を提供できますか?私は何年も問題なく、商用プロジェクトで何時間もかかるBackgroundWorkersを使用してきました。 –

+0

@Dour:これは前の質問です:http://stackoverflow.com/questions/230003/thread-vs-threadpool長時間実行されるタスクにスレッドプールを使用すると、スレッド管理アルゴリズムが混乱します –

関連する問題