尝试隐藏表单时,跨线程操作无效

时间:2013-09-10 11:54:12

标签: c# winforms

我有一个有两种形式的Windows应用程序。我试图实现这个目标:

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

我试过了:

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

但是在开始整个应用程序之前, “跨线程操作无效控件的结果是从” 上创建的线程以外的线程访问的。

我怎样才能实现我的目标?同样在我后面的代码中,我尝试关闭代码Form1.ActiveForm.Close();

,如上所示

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

2 个答案:

答案 0 :(得分:1)

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

    private delegate void BlankDelegate();

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

答案 1 :(得分:0)

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

试试这个 -

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