我有这个运行.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。问题是当我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
我该如何解决?感谢您的时间和答案。
答案 0 :(得分:33)
您正在获取异常,因为您试图从除了创建内容之外的其他线程关闭该表单。这是不允许的。
这样做
this.Invoke((MethodInvoker) delegate
{
// close the form on the forms thread
this.Close();
});
答案 1 :(得分:1)
当控件的创建线程以外的线程尝试访问该控件的某个方法或属性时,通常会导致不可预测的结果。常见的无效线程活动是在错误的线程上调用访问控件的Handle属性
获取或设置一个值,该值指示在调试应用程序时是否捕获访问控件的Handle属性的错误线程上的调用。
看看
答案 2 :(得分:-1)
您可以使用Delegate
public delegate void CloseDelagate();
Form1.Invoke(new CloseDelegate(Form2.Close));