I'm working on getting xref information and encountered a crash after using ResolveXrefs method.
In my host application, I use RuntimeSystem.Initialize() at the beginning and call RuntimeSystem.Terminate() upon exit. When opening a drawing for getting xref information, ResolveXrefs(false, true) is called in order to resolve xref links.
The problem is if the drawing contain nested xrefs, and there are unresolved xref in the nested ones, calling to RuntimeSystem.Terminate() will cause crash.
The crash is a System.AccessViolationException. Here is what I got.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
I have no idea what's wrong with it? Am I miss something when calling ResolveXrefs? Is there anything I need dispose? Do I need to lock the document?
To narrow down the issue, I found ResolveXrefs method will throw an UriFormatException under some circumstances. Is there anyone who know why this exception was thrown? And what is the proper way of handling?
I add several event handler to current database, and found during the execution of ResolveXrefs method, there are at least four events fired. They are XrefBeginAttached, XrefRedirected, XrefBeginOtherAttached and XrefAttachEnded. Seems the last event will be triggered only when all the xrefs have been handled (although there still exists unresolved xrefs). To my problem, the UriFormatException was fired after callback for XrefBeginOtherAttached is triggered. I think when the exception was thrown, there are something that need to be disposed, but unfortunately, I have no idea what should be disposed. And this should be the reason why RuntimeSystem.Terminate() failed with AV exception.
I would appreciate if anyone can give me some help. Many thanks!