# FormShow **Repository Path**: snapshot2018/FormShow ## Basic Information - **Project Name**: FormShow - **Description**: 在线程中显示一个新窗体,并返回值 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FormShow 在线程中显示一个新窗体,并返回值 在多线程中,一个线程结束时需要显示一些结果信息给用户,我采用新的窗体来显示。但简单的在线程体里面如下写 ``` private void ThreadFunc() { MsgForm msg = new MsgForm(); msg.Show(); } private void button1_Click(object sender, System.EventArgs e) { FormThread = new Thread(new ThreadStart(ThreadFunc)); FormThread.Start(); } ``` 生成的窗体一闪就没了。这是因为在线程中建的窗体,所有的资源都是属于这个线程的,所以当这个线程结束后,它的资源也被回收了,当然C#也就自动把窗体给关闭了。 正确的方法是用Invoke调用,代码如下: ``` private void ThreadFunc() { MethodInvoker mi = new MethodInvoker(this.ShowMsgForm); this.BeginInvoke(mi); } private void ShowMsgForm() { MsgForm msg = new MsgForm(); msg.Show(); } private void button1_Click(object sender, System.EventArgs e) { FormThread = new Thread(new ThreadStart(ThreadFunc)); FormThread.Start(); } ```