簡體   English   中英

C#Excel 2007 RTD服務器在退出時崩潰

[英]C# Excel 2007 RTD Server crashes on exit

我已經根據C#Kenny Ker的多個主題編寫了ac#RTD服務器

他的設計與我的設計之間的主要區別在於,我的數據來自WCF客戶。 我使用相同類型的計時器,每隔幾秒鍾調用m_callback.UpdateNotify(); 我的RefreshData方法使用主題值在WCF客戶端中調用一個函數,並將結果用作excel的值。 一切都很好。

問題是當我關閉Excel時出現的。

當我關閉Excel時,出現一個消息框,提示“ Microft Excel已停止工作”

我的ServerTerminate()方法清除了我所有的主題,在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)SP3 MSO(12.0.6662.5000)我正在使用Visual Studio 2008開發c#RTD服務器,並且我的項目引用了Microsoft.Office.Interop.Excel版本12.0.0.0

這個問題很模糊,但這是因為我真的不知道從哪里開始。 一切似乎都正常運行。

在玩完代碼之后,我注意到我有一個實現IDisposable的對象,完成該操作后便調用了Dispose。 該對象還具有一個名為Dispose的終結器。 我使用受保護的Dispose(bool)將其更改為更像這樣

我還再次根據Kenny Ker刪除了Excel程序集(但是僅復制他的代碼不起作用。我實際上是直接從excel interop程序集復制了接口)。

完成此操作后,我可以擺脫上面添加的行(用於整理垃圾收集),並且excel現在可以毫無問題地關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM