0

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 を使用しても違いはありませんでしたが、正しく実行できなかった可能性があります。

手がかりはありますか?

4

1 に答える 1

0

UIを書く関数を呼び出す際にContext.Postメソッドを使うことで解決した問題。

于 2013-04-24T23:20:46.647 に答える