捕获调用Application.DoEvents()时引发的异常

本文关键字:异常 调用 Application DoEvents | 更新日期: 2023-09-27 18:21:16

我是.Net的新手,我想知道为什么这段代码仍然会引发未处理的异常。

try
{
    Application.DoEvents();
}
catch
{
}

有人知道吗?此代码在事件处理程序中调用。它抛出NullReferenceException。有趣的是,当我试图在这段代码之前放置一个断点时,却没有抛出异常。只有当我让代码连续运行时,才会出现异常。

捕获调用Application.DoEvents()时引发的异常

并非所有异常都是可捕获的。您没有告诉我们您看到了什么异常,但请注意,StackOverflowExceptionExecutionEngineException永远不会被捕获。我知道前者可能发生在Application.DoEvents中(通常发生在System.Drawing中),但我不确定后者。

不管怎样,你的代码是邪恶的。不要轻信例外。这意味着你在吞下虫子。

一般情况下,尽量避免Application.DoEvents。可能会出现一些令人讨厌的重新进入问题。

注意使用Application.DoEvents(),大部分时间都用于错误的事情,比如在时间消耗过程中更新进度条,这可以通过异步编程来完成。你不可能捕捉到所有的异常,请告诉我们引发了什么异常。

也可能是当您在没有断点的情况下运行应用程序时,DoEvents允许执行另一段代码,而这段代码引发异常。

您应该检查异常的StackTrace以查看它指向您的位置(或者在此处发布堆栈跟踪,我们可以查看它)。如果是这种情况,则在使用断点和步进时可能看不到异常,因为DoEvents和线程的触发方式不同。

如果异常是在DoEvents期间从其他地方抛出的,这也可以解释为什么您会得到未处理的异常,尽管上面的代码试图隐藏任何异常。