c# - 我无法在调用的委托(delegate)中捕获异常

标签 c# visual-studio exception visual-studio-debugging

我有一个委托(delegate),它附加到 Excel 互操作组件中的一个事件。目标是使用来自 Excel 的更新信息更新 winforms 控件。由于我正在更改控件属性,因此我需要使用调用:

public delegate void DataGridViewUpdate(object[,] data);

...

excel.InteractiveEdit( delegate(object[,] data) { 
    Invoke(new Common.DataGridViewUpdate(back_from_excel), new object[] { data }); 
});

...

private void back_from_excel(object[,] data) {
    // datagridview updating code
    // an exception is thrown here !
}

(此代码位于我正在更新的 Form 类中,因此它在 this 上调用)

基本上我的问题是,当 back_from_excel(object[,] data) 方法中发生异常时,调试器不会捕获它。我知道委托(delegate)在正确的 UI 线程中运行,因为我在操作表单控件时没有遇到任何问题。

具体发生的情况是,当 back_from_excel 遇到未处理的异常时,它会在此时停止执行。应用程序的其余部分继续运行并响应。调试器不会暂停。输出面板显示:

A first chance exception of type 'System.NullReferenceException' occurred in My Application.exe
A first chance exception of type 'System.NullReferenceException' occurred in System.Windows.Forms.dll

它没有给我任何关于哪一行导致问题的提示,只是它在 .exe 中的某个地方。

我的问题是:我是否正确执行了 Invoke 操作?将委托(delegate) - 调用 - 委托(delegate)像那样链接在一起似乎有点奇怪,但我确实需要传递一个调用委托(delegate)的委托(delegate)。我的问题是在 Visual Studio 中而不是在 C# 中吗?如果是这样,我如何让调试器重新附加到该 UI 线程?

最佳答案

“第一次机会异常”表示抛出异常,但在某个时刻被捕获。由于您将委托(delegate)传递给 InteractiveEdit 方法,因此该方法可以轻松吞下委托(delegate)产生的任何异常。

默认情况下,Visual Studio 只会捕获未捕获的异常。如果要捕获所有异常,无论是否捕获,都需要配置 Visual Studio 以在所有异常时中断。参见 this link有关如何执行此操作的详细信息。

关于c# - 我无法在调用的委托(delegate)中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948416/

相关文章:

c# - 尽管有效的 XPath 查询,iterator.MoveNext() 返回 false

vector 的 C++ 读取访问冲突

c++ - 除零异常如何工作?

objective-c - 使用异常处理程序捕获iOS中低内存崩溃的统计信息

用于基准测试目的的 C# 编译器优化

c# - Windows 应用程序的 Twitter OAuth Echo | PIN 码问题

c# - 未处理的异常 : System. ArgumentException : Unable to find the requested .Net Framework 数据提供程序。它可能没有安装

.net - 如何防止Visual Studio在调试时启动WcfSvcHost.exe?

c++ - 编译别人的 vs c++ 应用程序 - 不一致的链接

visual-studio - 如何在 Visual Studio 中设置 DLL 文件的路径?