Sorry Bobby, maybe I didn't explain myself well, I'm not suggesting a solution, I don't think I have the knowledge since I'm still trying to solve a similar issue, what I was trying to say is that maybe moving part of your code (the myBackgroundworker) to the Commands module and activating it with a CommandFlags like ".Transparent" could solve.
As much as I know I think, but I'm not sure, you can have only 1 Active Editor for each Session of AutoCAD, so when you you press the OpenDrawing, actually I think you are changing the Active Editor. The acadApp.ShowModalDialog() sort of "freezes" the current Editor until the dialog is open.
In my program I do something like this:
from the ModalDialog:
Public Sub MakeNewDWG()
myForm.Hide()
Application.DocumentManager.MdiActiveDocument.SendStringToExecute("MakeDoc ", True, False, True)
End Sub
and from the Commands module:
<CommandMethod("MakeDoc", CommandFlags.Session)> _
Public Sub MakeDoc()
Dim myDoc As ApplicationServices.Document
myDoc = Application.DocumentManager.Add("c:\temp\myTemplate.dwt")
myDoc.Database.SaveAs("c:\temp\myDwg.dwg", DatabaseServices.DwgVersion.Current)
myDoc.CloseAndDiscard()
myDoc = Application.DocumentManager.Open("c:\temp\myDwg.dwg", False)
End Sub
This does not give any crash, I discovered that my problem was a matter of synchronization. When I exit the Dialog, even if I see my new drawing in the background, the Editor switches to the Editor that was opened when I launched the Dialog the first time.
If I change the CommandFlag, what I'm trying to do is actually change the current drawing in to the new one, so like in your case change the active Editor, I get different kind of results, even having my new drawing filled with the ents created by my code, but with No Editor accessible to the User when I exit the Code in the Dialog.
So as I said in my previous post, I'm not trying to give a solution, but just suggesting to explore the idea of moving the Backgroundworker in a command that works "Transparent" to the current session and having it change a public variable that you can check before anything else, in this way I think you have much more control on what's happening