尝试隐藏窗体时,跨线程操作无效

本文关键字:线程 操作 无效 隐藏 窗体 | 更新日期: 2023-09-27 18:30:44

我有一个有2个表单的Windows应用程序。我正在尝试实现这一目标:

显示第二个窗体时,我希望隐藏第一个窗体。

我试过这样的:

public Executor()
{
  InitializeComponent();
  Form1.ActiveForm.Hide();
}

但在启动整个应用程序之前,会导致"跨线程操作不是从创建它的线程以外的线程访问的有效控件"。

怎样才能实现我所说的?同样在我以后的代码中,我正在尝试关闭如上所示的代码Form1.ActiveForm.Close();

任何想法将不胜感激。

尝试隐藏窗体时,跨线程操作无效

使用委托在主题窗体的线程上调用 Close 方法:

    private delegate void BlankDelegate();
    private void CloseForm()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new BlankDelegate(this.CloseForm));
        }
        else
        {
            this.Close();
        }
    }

不能从运行该窗体的 UI 线程的线程以外的线程访问 UI 控件(或其父窗体)

试试这个——

 this.Invoke((Action)delegate { Form1.ActiveForm.Hide(); });