当试图关闭我的表单时,得到一个NotSupportedException
本文关键字:NotSupportedException 一个 我的 表单 | 更新日期: 2023-09-27 18:09:11
正如您在这个答案https://stackoverflow.com/a/39704027/6886308中看到的那样,您可以判断winform何时关闭,就像示例中Notepad
。我试着玩了一下,虽然例子中的代码可以工作,但有些事情让我感到困扰。
如果我想在Notepad
关闭时关闭我的应用程序该怎么办?所以我试着这样写:
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
if ((string)e.NewEvent["ProcessName"] == "notepad.exe")
{
Close();
}
}
它给我一个未处理的错误,所以我想也许焦点仍然在窗体上?或者说问题到底是什么?
编辑1:
下面是异常
您正在获得异常,因为您试图从创建进程的线程以外的线程关闭该进程。这是不允许的。
像这样做
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
if ((string)e.NewEvent["ProcessName"] == "notepad.exe")
{
this.Invoke((MethodInvoker) delegate
{
Close();
});
}
}
你的事件处理程序在另一个线程上,但你在窗体上调用Close,这是不允许的-你需要像Invoke((Action)Close);
这样的东西,它将把调用整理回UI线程