Закрыть форму из другого потока
у меня есть этот код, который работает .exe
string openEXE = @"C:UsersmarekDocumentsVisual Studio 2012ProjectstourstoursbinDebugnetpokl.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
как я могу это исправить ? Спасибо за ваше время и ответы.
3 ответов
вы получаете исключение, потому что вы пытаетесь закрыть форму из потока, отличного от того, что он был создан. Это запрещено.
, это
this.Invoke((MethodInvoker) delegate
{
// close the form on the forms thread
this.Close();
});
когда поток, отличный от потока создания элемента управления, пытается получить доступ к одному из методов или свойств этого элемента управления, это часто приводит к непредсказуемым результатам. Общим недопустимым действием потока является вызов неправильного потока, который обращается к свойству дескриптора элемента управления
получает или задает значение, указывающее, следует ли перехватывать вызовы неправильного потока, который обращается к свойству дескриптора элемента управления при отладке приложения.
посмотреть at
Вы можете закрыть форму с помощью Delegate
public delegate void CloseDelagate();
Form1.Invoke(new CloseDelegate(Form2.Close));