2012-02-20 41 views
0

在C#中查看Crystal Reports文档后,应用程序在退出时出现此错误。退出时出现'InvalidComObjectException'?

我在报告中调用了Close()和Dispose()方法。

从我读过的,这是因为一个COM对象被卸载后被调用,但我看不到这是怎么发生的。

有没有人见过这个?或者你能推荐一个工具来追踪这个问题吗?

谢谢!

[编辑]

栈跟踪时抛出异常:

CrystalDecisions.CrystalReports.Engine.dll CrystalDecisions.ReportAppServer.ISCDClientDocumentEvents_EventProvider.RemoveOnClosed(CrystalDecisions.ReportAppServer.ClientDoc._ISCDClientDocumentEvents_OnClosedEventHandler处理程序)+ 0x137 bytes
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.ReportAppServer.ISCDClientDocumentEvents_EventProvider.OnClosed.remove(CrystalDecisions.ReportAppServer.ClientDoc._ISCDClientDocumentEvents_OnClosedEventHandler va略)+ 0x33字节
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.DisconnectEventRelay()+ 0x75字节 CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.InternalClose(布尔bSetupForNextReport,布尔bAutoClose) + 0x10e字节
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Dispose(布尔bDisposeManaged)+ 0xb6字节
System.dll中!System.ComponentModel.Component.Dispose()+ 0×15字节
CrystalDecisions.CrystalReports .Engine.dll!CrystalDecisions.CrystalReports.Engine.ReportDocument.ClearCache(bool clearDocument)+ 0x1dd bytes
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.CrystalReports.Engine.ReportDocument.InternalClose(布尔bSetupForNextReport)+ 0×81字节
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.CrystalReports.Engine.ReportDocument.Close()+ 0x3F的字节
CrystalDecisions.CrystalReports.Engine.dll!CrystalDecisions.CrystalReports.Engine.ReportDocument.ExitHandler(对象发件人,发送System.EventArgs)+量0x120字节
KERNEL32.DLL!75e6339a()
[下面的帧可能是不正确的和/或没有加载kernel32.dll的符号]
ntdll.dll!77269ef2()
ntdll.dll!77269ec5()

+0

启用VS中的所有异常 - >调试 - >异常并在调试中启动 – sll 2012-02-20 16:29:02

+0

谢谢,我会试一试。 – James 2012-02-20 16:30:45

+0

如果您无法提供更好的详细信息,例如堆栈跟踪和代码段,请联系供应商以获取支持。向他们发送一个能够再现此异常的小型项目。 – 2012-02-20 16:35:48

回答

0

如果要处理一个COM对象,则必须调用COMObjects发行方法,它是这样

System.Runtime.InteropServices.Marshal.ReleaseComObject(YourComObjects Name);
+0

我真的不确定什么COM对象被调用,我在哪里可以找到它? – James 2012-02-20 16:31:02

+0

您正在实例化的Crystal Reports对象的名称是什么?这是COM对象..你可以显示代码..如果是这样我可以编辑/显示你在哪里放置代码行.. – MethodMan 2012-02-20 17:34:10

0

原来由线程这是造成 - 的形式显示报告是在一个单独的线程,当主线程退出时抛出异常。

如果其他人有这个问题,请尝试仅在主线程中使用Crystal Reports。