2

私は3つの時間のかかる関数のシーケンスを持っています.バックグラウンドワーカーまたはその他のツールでそれらを実行したいのですが、私の問題は、各関数が前の関数が完了するのを待つ必要があることです.これは私の擬似コードです:

open_session() // during the execution of this function i like to display a loading-window 

open_session() //this function opens a process another windows app , while opening this app i would like to keep the current app responsive.

close_session()// during the execution of this function i like to display a loading-window 

バックグラウンドワーカーを使用してこれを行うことを想像しましたが、機能は非同期です。

助けてください

4

2 に答える 2

10

これら 3 つすべてを同じバックグラウンド ワーカーで順番に実行してみませんか? したがって、backgroundworker の作業イベントは次のようになります。

private void yourBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    open_session();
    open_session();
    close_session();
}

このように、backgroundworker 自体は非同期ですが、順次実行する 3 つのメソッドは、非同期メソッドのコンテキスト内で引き続き順次実行されます。

于 2012-08-10T21:08:21.957 に答える
3

RunWorkerCompleted前のイベントハンドラーで連続する各ワーカーを開始するだけです...

反対票への対処:可能性があることに注意してください。それが良い選択であるかどうかは、いつものように明らかにコンテキストに依存します。「BGWは1つだけ使ったほうがいい」などの黄金律は信じていません。すべてのタスクに 1 つの BW を使用しても問題が単純化されない状況はたくさん想像できます (たとえば、各操作ProgressChangedを別々に処理する必要がある場合)。

OP は複数のバックグラウンド ワーカーについて尋ねましたが、どのアプローチが最適かを判断するのに十分なコンテキストを提供していませんでした。私が知っている限りでは、BW がどのように機能するかをよりよく理解するために、BW を「チェーン」する方法を理論的に疑問に思っているだけかもしれません。 .

于 2012-08-10T20:58:17.670 に答える