Kenny Ker の Multiple Topics in C# に基づいて、ac# RTD サーバーを作成しました。
彼の設計と私の設計の主な違いは、私のデータが WCF クライアントから取得されていることです。私は同じタイプのタイマーを使用し、数秒ごとにm_callback.UpdateNotify();
. 私のRefreshData
メソッドは、トピック値を使用して WCF クライアントの関数を呼び出し、その結果を Excel の値として使用します。それはすべてうまく機能します。
問題は、Excel を閉じるときに発生します。
Excel を閉じると、「Microft Excel が動作を停止しました」というメッセージ ボックスが表示されます。
私のServerTerminate()
メソッドはすべてのトピックをクリアし、WCF クライアントで close を呼び出し、エラーなしで終了します。
問題はCOMの問題かもしれないと思ったので、追加してみました
while ( Marshal.ReleaseComObject( m_callback ) > 0 ) ;
m_callback = null;
ポップアップはまだ表示されたので、追加してみました
GC.Collect();
GC.WaitForPendingFinalizers(); //SEHException thrown from this
GC.Collect();
GC.WaitForPendingFinalizers();
これらの行を追加すると、例外がスローされます。例外を無視すると、問題なく Excel が終了しますが、RTD サーバーを Excel 2010 を搭載したコンピューターにインストールすると、ポップアップ ボックスが表示されたままになります。
Excel 2007 (12.0.6665.5003) SP3 MSO (12.0.6662.5000) を持っています Visual Studio 2008 を使用して c# RTD サーバーを開発していますが、プロジェクトには Microsoft.Office.Interop.Excel バージョン 12.0.0.0 への参照があります