C# 中 WinForm 的跨线程问题

问题描述 投票:0回答:1

我正在使用C#在WinForm中显示一些信息。当我从服务器收到信息时,我正在打开第二个 WinForm。我使用以下代码来显示第二种形式: 我遇到的问题是:第二个表单不再刷新。其上的任何控件(复选框、绘图等)都会停止刷新,并且新状态未知(例如复选框不会刷新新状态)。我是否以错误的方式使用 Invoke()...

任何帮助将不胜感激。

private void ShowChartForm(){
   if ((ChartViewForm == null) || (ChartViewForm.IsDisposed)){
      ChartViewForm = new ChartForm();
   }
   try
   {
      if (this.InvokeRequired)
         this.Invoke(new MethodInvoker(delegate
         {
            ChartViewForm.Show(this);
         }));
      else
        {
           ChartViewForm.Show(this);
        }
    }
   catch
   {
   }
}

我没有跨线程消息,但表单不刷新。

c# winforms cross-thread
1个回答
0
投票

除非你启动了一个新线程,否则不需要Invoke。不要在同一张表格上拨打

Show
两次。重新激活现有的或创建一个新的。

private void ShowChartForm()
{
    if (ChartViewForm == null || ChartViewForm.IsDisposed) {
        ChartViewForm = new ChartForm();
        ChartViewForm.Show(this);
    } else {
        ChartViewForm.WindowState = FormWindowState.Normal;
        ChartViewForm.BringToFront();
    }
}

private void ShowChartForm()
{
    if (ChartViewForm != null && !ChartViewForm.IsDisposed) {
        ChartViewForm.Close();
    }
    ChartViewForm = new ChartForm();
    ChartViewForm.Show(this);
}
© www.soinside.com 2019 - 2024. All rights reserved.