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 回答