Получаете InvalidComObjectException при выходе? - PullRequest
0 голосов
/ 20 февраля 2012

После просмотра документа Crystal Reports в C # приложение выдает эту ошибку при выходе.

Я вызвал методы Close () и Dispose () в отчете.

Отто, что я прочитал, это происходит потому, что COM-объект вызывается после его выгрузки, но я не вижу, как и где это происходит.

Кто-нибудь видел это раньше?Или вы могли бы порекомендовать инструмент для отслеживания проблемы?

Спасибо!

[Редактировать]

Отслеживание стека при возникновении исключения:

CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.ReportAppServer.ISCDClientDocumentEvents_EventProvider.RemoveOnClosed (обработчик CrystalDecisions.ReportAppServer.ClientDoc._ISCDClientDocumentEvents_OnClosedEventHandler) + 0x137 байт
CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.ReportAppServer.ISCDClientDocumentEvents_EventProvider.OnClosed.удалить (значение CrystalDecisions.ReportAppServer.ClientDoc._ISCDClientDocumentEvents_OnClosedEventHandler) + 0x33 байт
CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.DisconnectEventRelay () + 0x75 байт CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.InternalClose (bool bSetupForNextReport, bool bAutoClose) + 0x10e байт
CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Dispose (bool bDisposeManaged) + 0xb6 байт
System.dll! System.ComponentModel.Component.Dispose () + 0x15 байт_экспорта * 10s.EngineSec.dll! CrystalDecisions.CrystalReports.Engine.ReportDocument.ClearCache (bool clearDocument) + 0x1dd bytes
CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.CrystalReports.Engine.ReportDocument *Выступление_эксплуатации_эксплуатация_эксплуатация_эксплуатация_эксплуатация_эксплуатация 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 28 28 28 0, 1230, 0, 0, 0, для,,,,,,,,,,,, как,CrystalReports.Engine.dll! CrystalDecisions.CrystalReports.Engine.ReportDocument.Close () + 0x3f bytes
CrystalDecisions.CrystalReports.Engine.dll! CrystalDecisions.CrystalReports.Engine.ReportDocument.ExitHandler (объект-отправитель), объект-отправитель, объект отправитель0x120 байт
kernel32.dll! 75e6339a ()
[Нижеприведенные кадры могут быть неправильными и / или отсутствовать, символы не загружены для kernel32.dll]
ntdll.dll! 77269ef2 ()
ntdll.dll! 77269ec5 ()

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Оказывается, это было вызвано многопоточностью - форма, показывающая, что отчет был в отдельном потоке, и исключение было выдано при выходе из основного потока.

Если у кого-то еще есть эта проблема, попробуйте использовать CrystalОтчеты только в основной ветке.

0 голосов
/ 20 февраля 2012

Если вы утилизируете объект Com, вы должны вызвать COMObjects Release метод, который похож на этот

System.Runtime.InteropServices.Marshal.ReleaseComObject( YourComObjects Name ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...