C#Excel 2007 RTD Server在退出时崩溃

时间:2013-06-26 17:31:10

标签: c# excel rtd

我编写了一个基于Kenny Ker's Multiple Topics in C#

的c#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关闭没有任何问题,但如果我在带有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

1 个答案:

答案 0 :(得分:0)

问题相当模糊,但那是因为我真的不知道从哪里开始。每件事似乎都正常工作。

在玩完代码之后,我注意到我有一个实现IDisposable的对象,当我完成它时,我调用了Dispose。该对象还有一个名为Dispose的终结器。我将其更改为更像this且受保护的Dispose(bool)

我还删除了每Kenny Ker again的Excel程序集(但是只是复制他的代码不起作用。我实际上直接从excel互操作程序集中复制了接口。)

在这之后,我能够摆脱上面添加的行(用于编组垃圾收集),excel现在关闭没有问题。