0

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 への参照があります

4

1 に答える 1