0

我正在 C# Windows 窗体中制作一个 1:N 异步聊天程序。

服务器连接成功后,尝试将按钮的Enabled属性更改为。Connectfalse

此时抛出了跨线程异常。

幸运的是,我知道如何使用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;
  }));
}

我觉得那么每次发生跨线程异常时,像上面这样写代码似乎效率低下。

有没有办法将它们整合成一个?

或者你能让代码更简单吗?

谢谢您的帮助。

4

0 回答 0