从另一个线程关闭窗体
本文关键字:窗体 线程 另一个 | 更新日期: 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));