Excel相互運用機能コンポーネントのイベントにアタッチされているデリゲートがあります。目標は、Excelからの更新された情報でwinformsコントロールを更新することです。Controlプロパティを変更しているので、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 !
}
(このコードは私が更新しているFormクラスにあるので、Invoking onですthis
)
基本的に私の問題は、メソッドで例外が発生したときにback_from_excel(object[,] data)
、デバッガーがそれをキャッチしないことです。フォームコントロールの操作に問題がないため、デリゲートが正しい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
ことを正しくやっていますか?デリゲート-Invoke-デリゲートがそのようにチェーンされているのはちょっと奇妙に思えますが、デリゲートを呼び出すデリゲートを渡す必要があります。私の問題はC#ではなくVisual Studioにありますか?その場合、デバッガーをそのUIスレッドに再接続するにはどうすればよいですか?