7


1

バックグラウンドワーカーを使用した複数のロングメソッドのベストプラクティス

多くの長いメソッドを持つフォームがあります。 私の探求は:ベストプラクティスとは何ですか? 匿名メソッドと1つのバックグラウンドワーカーのみを使用するか、各ロングメソッドにBackgroundWorkerのインスタンスを作成します。

助けてください。 ありがとう。

2 Answer


2


個人的には、タスクごとにBackgroundWorkerのインスタンスを1つ使用します。 ただし、スレッドの複数の異なるインスタンスで同じデリゲートメソッドを複数回呼び出す場合があることに注意してください。

長いメソッドタスクごとにBackgroundWorkerを1つ持つことで、メソッドを十分に制御できます。 さらに、私の理解では、BackgroundWorkerのインスタンスがタスクを実行すると、このバックグラウンドタスクでビジー状態になるため、他のユーザーが使用できなくなります。 おそらく間違っているかもしれませんが、DoWork()イベントハンドラーはこのBackgroundWorkerに対して実行するように求められていることしかできないため、とにかくそれを行う方法です。 そのため、BackgroundWorkerの1つのインスタンスだけでまったく異なるタスクを実行することは不可能に思えます。

これは助けになりますか?


2


要約すれば:

  • 1つのBackgroundWorkerの利点:*

    1. 複数のメソッドの実行順序を制御します。 ただし、これも欠点です。複数のBackgroundWorkerを使用する場合、それらが並列に実行され、順序を気にする必要がないと想定されるためです。

    2. スレッドの作成と破棄のオーバーヘッドが少ない(可能な場合は同じものを使用する インスタンスを毎回実行しますが、プロセスを開始するものによっては、常に可能であるとは限りません。 同時に実行したい場合は不可能です);

    3. スレッド間で通信したい場合は、バッチを蓄積できます コミュニケーションとそれをより効率的に行います。 さらに、すべてのメソッドが同じスレッドで実行されている場合、通信の一部を節約できます。

複数のBackgroundWorkersの利点:

  1. 前述の並列処理。

  2. 各プロセスの終わりは別のデリゲートを使用できるため、 その他の操作。

それが役に立てば幸い!