尝试关闭我的表单时获取NotSupportedException

时间:2016-09-27 07:35:55

标签: c# winforms

正如您在此回答https://stackoverflow.com/a/39704027/6886308中所看到的,您可以告诉winform何时关闭,例如Notepad。 我试着玩了一下,虽然示例中的代码工作,但有些事情困扰着我。

如果我想在Notepad关闭时关闭我的应用程序怎么办?所以我尝试了类似的内容:

void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
    if ((string)e.NewEvent["ProcessName"] == "notepad.exe")
        {
           Close();
        }
}

它正在给我一个未处理的错误,所以我想也许重点仍然放在winform上?或者实际上是什么问题?

编辑1:

Here is a screenshot of the exception

2 个答案:

答案 0 :(得分:0)

您的事件处理程序位于另一个主题上,但您在表单上调用了“关闭”并且不允许 - 您需要使用Invoke((Action)Close);这样的内容来将调用重新编组回UI线程

答案 1 :(得分:0)

您正在获取异常,因为您尝试从除创建它之外的线程关闭进程。这是不允许的。

这样做

void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
    if ((string)e.NewEvent["ProcessName"] == "notepad.exe")
        {
           this.Invoke((MethodInvoker) delegate
            {

               Close();
            });
        }
}