我已经根据Kenny Ker 的 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