So if I understand it correcly, your application has 4 windows. The main window and 3 other forms. The 3 forms are updated by backgroud worker threads.
Does the program always create all 3 forms, even if they are not visible?
Does the program always start the 3 background threads, or does it wait until the associated window is set to visible?
If the thread starts when the window is set to visible, are there any provisions to suspend or terminate the thread when the window is hidden?
Can you identify whether it is the close of the first window or the open of the second window that is causing your lockup?
How does the background thread interface with the window?
As I say the above, I seem to remember that you can (or could) generate problems when making calls into methods of the window (form) from more than one thread.