用Show(),而不是ShowDialog()的话,子窗体应该是在另一个线程里运行的,父窗体怎么会死。。会不会是其他原因导致的,能不能详细描述一下。O(∩_∩)O哈哈~
可以试试BackgroundWorker这个控件,位于System.ComponentModel.BackgroundWorker。
在mainForm的“打开子窗体”按钮事件中:
thread t=new thread(new threadstart(func));
t.start();
然后在线程中让窗体show出来
private void func()
{
SubForm subForm=new SubForm();
subForm.Show();
}
之所以子窗口和父窗口都会死掉,是因为他们都在同一个线程(界面线程)中,当执行Sleep()时,线程被占用。最好的解决方法就是使用多线程。在窗口程序中,非界面线程不能操作界面控件,如果SubForm的form_load函数中没有涉及到界面控件,则可直接使用多线程,否则需考虑使用BackgroundWorker组件或Invoke或BeginInvoke异步调用方法