1) クライアント プログラムの接続開始ボタンをクリックします。スタートボタンの背景色を赤に設定することに成功しました。
2) TCP 接続が完了すると、登録メッセージが送信され、ボタンの背景色が黄色に変更されます。
3) サーバーは登録 ACK をクライアントに送り返し、バックグラウンドワーカー (BGW) で処理されます。BGW はブール変数 SetConnectButton を設定して、登録が成功したことを認識してから完了します。
4) RunWorkerCompleted 関数が実行されます。デバッグ ウィンドウには "Lime" が表示されますが、ボタンの色は変わりません。これが RunWorkerCompleted コードです。
static private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (SetConnectButton)
{
Debug.WriteLine("Lime");
SetConnectButton = false;
UIMain.btnServerConnect.BackColor = System.Drawing.Color.Lime;
}
}//close WorkerCompleted
私が理解しているように、RunWorkerCompleted は UI スレッドで実行されるため、これはそのまま機能するはずです。Invoke を使用しても違いはありませんでしたが、正しく実行できなかった可能性があります。
手がかりはありますか?