Yongq Wong

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

有很多朋友不知道怎么在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.

posted on 2009-04-08 10:29  Yongq wong  阅读(247)  评论(0编辑  收藏  举报