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没有任何区别,尽管我可能做得不对。
任何线索?
答案 0 :(得分:0)
在调用编写UI的函数时,使用Context.Post方法解决了问题。