Okay, this is probably a stupid question about threads, but I'm completely lost here...

So I made this network library that runs each client on a separate thread, and whenever a message arrives, starts a temporary thread that delivers the message as an event to the parent of the class. So far so good, messages get delivered the way they should.

Now I want to make a form visible as soon as a particular message is received. Now there is where it goes wrong. I created a ThreadSafeForm, with (for now) one method:

Code:
   public class ThreadSafeForm : Form
   {
      delegate void SetBoolDelegate(bool parameter);
      public void setVisible(bool value)
      {
         if (InvokeRequired)
         {
            this.BeginInvoke(new SetBoolDelegate(setVisible), value);
            return;
         }
         this.Visible = value;
      }
   }
The problem is... When I call frmName.setVisible(true) after receiving the message, it indeed shows up for one millisecond, then disappears, assuming when the thread that delivered the message ends, that form is destroyed (or something similar)... Does anyone know why? I do invoke right? And I initialized the form at application start, so not in that message delivering thread...