按钮BackColor将不会在Backgroundworker完成方法中更改

时间:2013-04-11 22:55:16

标签: c#-4.0 backgroundworker backcolor

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

任何线索?

1 个答案:

答案 0 :(得分:0)

在调用编写UI的函数时,使用Context.Post方法解决了问题。