当试图关闭我的表单时,得到一个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:

下面是异常

当试图关闭我的表单时,得到一个NotSupportedException

的截图

您正在获得异常,因为您试图从创建进程的线程以外的线程关闭该进程。这是不允许的。

像这样做

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

你的事件处理程序在另一个线程上,但你在窗体上调用Close,这是不允许的-你需要像Invoke((Action)Close);这样的东西,它将把调用整理回UI线程

相关文章:
  • 没有找到相关文章