当前位置: 首页 > 编程语言 > C#

如何在C#中的不同线程上运行新窗体?分享

时间:2023-04-11 02:59:46 C#

C#如何在不同的线程上运行新窗体?我只是想在每次单击按钮时运行一个新线程,这应该会创建一个新表单。我在MainForm的按钮点击事件中尝试了这个:worker2=newThread(newThreadStart(thread2));worker1.开始();worker2.开始();}privatevoidthread1(){SubForms=newSubForm();s.Show();}privatevoidthread2(){SubForms=newSubForm();();}子窗体按钮点击事件中的代码如下:privatevoidbutton1_Click(objectsender,EventArgse){intmax;尝试{max=Convert.ToInt32(textBox1.Text);}赶上{消息框。Show("请输入数字","错误");返回;}progressBar1.Maximum=max;for(longi=0;i{//做一些计算,大概是在某种循环中...while(...){//每次你想更新进度条:progressForm.Invoke(newAction(()=>{progressForm.ProgressBar.Value=...;}));//如果你准备取消计算:if(interrupt)break;}//计算完成——关闭进度表progressForm.Invoke(newAction(()=>{progressForm.Close();}));});线程。开始();//允许用户使用取消按钮取消计算progressForm.CancelButton.Click+=(s,e)=>{interrupt=true;};}不同的表单可以在不同的线程上运行。我知道有两个警告:两种形式都不是另一种形式的MDI客户端。当窗体具有不同的线程时,尝试从另一个窗体创建MDI客户端将失败。如果一个对象向多个窗体发送事件并且所有窗体都使用相同的线程,则可以在引发事件之前将事件同步到主线程。否则,必须异步引发事件,并且每个表单都必须为传入事件实现自己的同步机制。显然您不希望任何窗口的UI线程被阻塞,但是为单独的窗口使用单独的线程可能是一个不错的选择。尝试这个。它在自己的线程上运行新表单,该线程有自己的消息队列,等等。运行此代码:newThread(newThreadStart(delegate{Application.Run(newForm());})).Start();使用Thread.CurrentThread.GetHashCode()来测试它是否在不同的线程上运行。以上是C#学习教程:C#中如何在不同的线程上运行一个新窗体?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: