C# 我能';t捕获调用的委托中的异常

C# 我能';t捕获调用的委托中的异常,c#,visual-studio,exception,visual-studio-debugging,C#,Visual Studio,Exception,Visual Studio Debugging,我有一个委托,它附加到Excel互操作组件中的事件。目标是使用Excel中更新的信息更新winforms控件。因为我正在更改控件属性,所以需要使用Invoke: public delegate void DataGridViewUpdate(object[,] data); ... excel.InteractiveEdit( delegate(object[,] data) { Invoke(new Common.DataGridViewUpdate(back_from_exce

我有一个委托,它附加到Excel互操作组件中的事件。目标是使用Excel中更新的信息更新winforms控件。因为我正在更改控件属性,所以需要使用Invoke:

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 !
}
(此代码位于我正在更新的表单类中,因此它在
This
上调用)

基本上,我的问题是当
back\u from\u excel(object[,]data)
方法中发生异常时,调试器无法捕获它。我知道委托正在正确的UI线程中运行,因为我在操作表单控件时没有问题

具体来说,当
back\u from\u 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
操作是否正确?像这样将委托-调用-委托链接在一起似乎有点奇怪,但我确实需要传递一个调用委托的委托。我的问题是在Visual Studio中,而不是在C#中?如果是这样,如何将调试器重新连接到该UI线程?

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


默认情况下,VisualStudio将只捕获未捕获的异常。如果希望捕获所有异常,无论是否捕获,都需要将Visual Studio配置为断开所有异常。有关如何执行此操作的详细信息,请参阅。

谢谢;捕获调试器中所有异常的设置足以满足我的需要。我仍然不明白例外情况是怎么回事;它们当然没有被我的代码捕获,它们是错误(如空引用异常),通常由程序员处理。@Brian:我猜
excel.InteractiveEdit
方法是excel互操作库的一部分,对吗?它可能会接受由您发送给它的代理生成的异常,以维护其内部完整性。不,实际上,这是我自己的方法。它将委托添加到由Excel互操作触发的事件中。不过你可能是对的;这让我对这种奇怪的感觉好多了。