いくつかのコントロールの値をインクリメントするワーカー スレッドがあるとします。インボークが必要なため、すべてのインクリメントは GUI スレッドで行う必要があります。そのために、BeginInvoke を使用します。
私の質問は:
複数のワーカー スレッドがすべて同時に GUI スレッドで呼び出されるため (インクリメント自体someControl.Value += value;
は明らかにアトミックではありません)、競合状態によってコントロールのインクリメントが中断される可能性はありますか?
または、逆に言えば:
別の Invoke が処理される前に、1 つの Invoke が終了することが保証されていますか?
delegate void valueDelegate(int value);
private void IncrementValue(int value)
{
if (InvokeRequired)
{
BeginInvoke(new valueDelegate(IncrementValue),value);
}
else
{
someControl.Value += value;
}
}
ありがとうございました!