我正在 C# Windows 窗体中制作一个 1:N 异步聊天程序。
服务器连接成功后,尝试将按钮的Enabled
属性更改为。Connect
false
此时抛出了跨线程异常。
幸运的是,我知道如何使用Invoke
.
所以我写了如下代码。
private void ConnectEnabledChange(bool state)
{
this.Invoke(new Action(delegate ()
{
Connect.Enabled = state;
}));
}
然而,问题是我们需要更改Connect
按钮的属性以及其他几个控件的属性。
try
{
server.Start();
ConnectEnabledChange(false);
DisConnectEnabledChange(true);
StateLabelChange("Current State : Connected");
}
...
private void ConnectEnabledChange(bool state)
{
this.Invoke(new Action(delegate ()
{
Connect.Enabled = state;
}));
}
private void DisConnectEnabledChange(bool state)
{
this.Invoke(new Action(delegate ()
{
DisConnect.Enabled = state;
}));
}
private void StateLabelChange(string state)
{
this.Invoke(new Action(delegate ()
{
StateLabel.Text = state;
}));
}
我觉得那么每次发生跨线程异常时,像上面这样写代码似乎效率低下。
有没有办法将它们整合成一个?
或者你能让代码更简单吗?
谢谢您的帮助。