2012-02-20 43 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。