質問: " + button1.enabled.tostring()); appexcel.workbookbeforeclose -= eventdel_beforebookclose; } } }
回答: ご考察の通り 異なるスレッド(プロセス)間のイベントのために引き起こされている現象だと思います ボタンのenabledプロパティおよび beforebookcloseのイベント削除用のハンドラを別に用意します これを delegateを通して invokeで呼び出してあげればいいようです private void myenabelmethod() { // これらの操作をするスレッドが違うと処理が続行されない // excel側で例外を吸収してしまっているのかも // 以下の処理順は どちらが先でもokなようです button1.enabled = true; appexcel.workbookbeforeclose -= eventdel_beforebookclose; } private delegate void myenabled(); private myenabled mydelgateenabled; form_loadイベントやコンストラクタで mydelegateenabeld = new myenabled( myenabledmethod ); を実行しておく befotrebookcloseイベントで invoke( mydelegateenabeld ); を実行 といった具合でいいと思います ...