2

私はカウンターを持っています - それを単にItemsRemainingと呼びましょう。

動的な量のスレッドを使用しますが、この例では、10 個のスレッドがあるとします.....

各スレッドにはループが含まれ、ループ内の各反復は作業単位を実行してから、GUI スレッドの ItemsRemaining 変数を更新する必要があります。これはプライベート int の場合もあれば、コントロール値の場合もあります。

複数のスレッド呼び出しからこの ItemsRemaining を正確に更新するにはどうすればよいですか? 同時に、ロックによるパフォーマンスの低下が大きくなりすぎないようにするには?

4

4 に答える 4

0

Control.Invoke変数のインクリメントごとに UI を更新する場合は、スレッドから(Winforms) またはDispatcher.Invoke(WPF)を使用して UI を更新するメソッドを呼び出し、UI を更新する直前にそのメソッドint自体で変数をインクリメントします。変数への変更は UI スレッドを介して自動的に同期されるため、ロックは必要ありません。

BeginInvokeUI の更新が完了するまでワーカー スレッドを待機させたくない場合は、バリアントを使用することもできます。

于 2013-07-15T08:55:29.267 に答える