C#从另一个线程调用form.show()如果我从另一个线程在WinForms对象上调用form.show(),将抛出表单异常.如何向主应用程序线程添加新的可见表单?否则,如何在不停止当前正在执行的线程的情况下打开表单?这是我的示例代码。我正在尝试启动一个线程,然后在该线程中做一些工作。随着工作的进展,我将展示表格。publicvoidMain(){newThread(newThreadStart(showForm)).Start();//主线程的其余部分在这里...}publicvoidshowForm(){//在这里做一些工作。myForm表单=newmyForm();form.Text="我的文字";形式.显示();//在这里做更多的工作}尝试使用call:publicstaticFormglobalForm;voidMain(){globalForm=newForm();全球形式。展示();globalForm.Hide();//在这里生成线程}voidThreadProc(){myFormform=newmyForm();globalForm.Invoke((MethodInvoker)delegate(){form.Text="mytext";form.Show();});}“调用”调用告诉表单“请在你的线程而不是我的线程中执行这段代码”。然后,您可以从委托中更改WinFormsUI。更多关于Invoke的文档:http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx编辑:您将需要使用已经存在的WinForms对象来调用invoke。我在这里展示了如何创建一个全局对象;否则,如果您有任何其他Windows对象,它们也可以工作。调用form.Show()之后,您应该调用Application.Run()form.Show()。例如:publicvoidshowForm(){//在这里做一些工作。myForm表单=newmyForm();form.Text="我的文字";形式.显示();应用程序运行();//在这里做更多的工作}至于为什么背后的细节,这个msdnpost可能会有所帮助。根据我的经验最好的方法:以上是C#学习教程:C#从另一个线程调用form.show()来分享全部内容。多多关注—varac=(ReportPre)Application.OpenForms["ReportPre"];Threadshower=newThread(newThreadStart(()=>{if(ac==null){this.Invoke((MethodInvoker)delegate(){ac=newReportPre();ac.Show();});}else{this.Invoke((MethodInvoker)delegate{pictureBox1.Visible=true;});if(ac.InvokeRequired){ac.Invoke(newMethodInvoker(delegate{ac.Hide();ac.Show();}));}}}));淋浴。开始();删除。如需转载请注明出处:
