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 没有任何区别,尽管我可能做得不对。
有什么线索吗?