从另一个线程关闭窗体

本文关键字:窗体 线程 另一个 | 更新日期: 2023-09-27 18:28:05

我得到了运行.exe 的代码

string openEXE = @"C:'Users'marek'Documents'Visual Studio 2012'Projects'tours'tours'bin'Debug'netpokl.exe";
                 Process b = Process.Start(openEXE);
                 b.EnableRaisingEvents = true;
                 b.Exited += (netpokl_Closed);

当它关闭时,它调用方法netpokl_Closed。问题是当I insert into netpokl_Closed command-this.Close()时,出现此异常:Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on

我该怎么修?感谢您的时间和回答。

从另一个线程关闭窗体

您收到异常是因为您试图从创建表单的线程以外的线程关闭表单。这是不允许的。

像这个吗

this.Invoke((MethodInvoker) delegate
        {
            // close the form on the forms thread
            this.Close();
        });

当控件的创建线程以外的线程试图访问该控件的某个方法或属性时,通常会导致不可预测的结果。常见的无效线程活动是对访问控件的Handle属性的错误线程的调用

获取或设置一个值,该值指示在调试应用程序时是否捕获访问控件的Handle属性的错误线程上的调用。

看看

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx

您可以使用Delegate 关闭表单

      public delegate void CloseDelagate(); 
      Form1.Invoke(new CloseDelegate(Form2.Close));