创建多线程

using System.Threading; 线程的命名空间

private void ThreadFunc() 
{     
  
   Form temp = new Form();  
   temp.Show();    
 
}  

 private void button1_Click(object sender, System.EventArgs e) 

{     
    //创建线程
    FormThread = new Thread( new ThreadStart( ThreadFunc ) );    
    FormThread.Start(); //执行线程
}

这样写,若点击button按钮,被创建的窗体闪了一下就消失了,是因为在线程中建的窗体,所有的资源都是属于这个线程,所以当这个线程结束后,它的资源也被回收了,C#也就自动把窗体给关闭了。

正确的写法,用Invoke调用

 private void button2_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(ThreadFunc));
            thread.Start();
           
        }

        private void ThreadFunc()
        {
            MethodInvoker mi = new MethodInvoker(ShowFrm); //创建委托
            this.BeginInvoke(mi); //创建控件的基础句柄所在线程上异步执行指定委托
        }

        private void ShowFrm()
        {
            string[] info = new string[] {"张三",""};
            Form2 frm = new Form2(info);
            frm.Show();
        }

 

 

posted @ 2013-10-15 17:11  ku:k  阅读(165)  评论(0编辑  收藏  举报