-3

我有一个有 2 种形式的 Windows 应用程序。我正在努力实现这一目标:

当显示第二个表单时,我希望隐藏第一个表单。

我试过像:

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

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

我怎样才能实现我所说的?同样在我后来的代码中,我试图用上面的代码关闭Form1.ActiveForm.Close();

任何想法都会非常感激..

4

2 回答 2

2

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

    private delegate void BlankDelegate();

    private void CloseForm()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new BlankDelegate(this.CloseForm));
        }
        else
        {
            this.Close();
        }
    }
于 2013-09-10T11:58:31.893 回答
0

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

试试这个-

 this.Invoke((Action)delegate { Form1.ActiveForm.Hide(); });
于 2013-09-10T12:00:23.040 回答