有很多朋友不知道怎么在thread中打开一个窗体,总是说没有反应,下面我就说说这方面自己的经验。代码如下:
private void ThreadFunc()
{
//run your coding;
Form temp = new Form();
temp.Show();
//run your coding;
}
private void button1_Click(object sender, System.EventArgs e)
{
FormThread = new Thread( new ThreadStart( ThreadFunc ) );
FormThread.Start();
}
像上面的代码,若点击button按钮,大家可以看到被创建的窗体闪了一下,就消失了,这是因为你在线程中建的窗体,所有的资源都是属于这个线程的,所以当这个线程结束后,它的资源也被回收了,当然C#也就自动把窗体给关闭了。
正确的方法是用Invoke调用,代码如下:
private void ThreadFunc()
{
MethodInvoker mi = new MethodInvoker(this.ShowForm);
this.BeginInvoke(mi);
}
private void ShowForm( )
{
Form temp = new Form();
temp.Show();
}
private void button1_Click(object sender, System.EventArgs e)
{
FormThread = new Thread( new ThreadStart( ThreadFunc ) );
FormThread.Start();
}
备注:不使用invoke()方法,也可以在线程中用Showdialog()方法来显示这个new form.