RTD服務器崩潰我已經寫了一個基於C#RTD服務器關閉的Kenny Ker's Multiple Topics in C#C#Excel 2007中退出
他的設計之間的主要區別和我的是,我的數據來自一個WCF客戶端。我使用相同類型的計時器,並且每隔幾秒鐘撥打m_callback.UpdateNotify();
。我的RefreshData
方法使用主題值調用我的WCF客戶端中的函數,並將結果用作excel的值。這一切都很好。
問題出在我關閉excel。
當我關閉Excel我得到一個消息框,上面寫着「Microft的Excel已停止工作」
我ServerTerminate()
方法清除我的所有話題,調用close我的WCF客戶端和出口上沒有錯誤。
我想這個問題可能是一個COM問題,所以我已經嘗試添加
while (Marshal.ReleaseComObject(m_callback) > 0) ;
m_callback = null;
的彈出仍表現,所以我嘗試添加
GC.Collect();
GC.WaitForPendingFinalizers(); //SEHException thrown from this
GC.Collect();
GC.WaitForPendingFinalizers();
加上幾行就拋出異常。如果我忽略excel關閉的異常而沒有任何問題,但是如果我在裝有Excel 2010的計算機上安裝RTD服務器,那麼彈出框仍然存在。
我有Excel 2007中(12.0.6665.5003)MSO SP3(12.0.6662.5000) 我使用Visual Studio 2008開發我的C#RTD服務器和我的項目有版本的Microsoft.Office.Interop.Excel一個12.0.0.0參考
請您詳細介紹如何在刪除Excel程序集時使其工作。我試着複製完全相同的接口,相同的GUID,保持TypeLibType和DispId ID沒有運氣。按照Kenny Ker的建議(http://weblogs.asp.net/kennykerr/archive/2008/12/16/Rtd7.aspx)將這些接口與MarshalAs參數結合起來。它只在一開始就起作用,但當它連接到ConnectData()是因爲我看到了數據,但是在它開始刷新之後,得到了一個N/A,之後根本不會看到任何數據。如果你在這裏粘貼接口或發送 –
,我不得不在互操作程序集上使用對象瀏覽器來正確使用它。但[這裏](https://gist.github.com/buchmoyerm/9001271)是我使用的文件。不過,我已經轉向使用ExcelDna,我強烈推薦它。 – MarkB42