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

同时运行两个WinformWindows分享

时间:2023-04-10 16:58:51 C#

同时运行两个WinformWindows我有两个C#winform(.NET4.0)窗体,每个窗体连续运行独立但相似的自动化任务。不同之处在于它们是不同的流程/工作流,但它们在项目中共享相同资源(方法、数据模型、程序集等)的操作方式相似。两种形式都完成了,但现在我不知道如何运行程序,使每个窗口在启动时打开并独立运行。一旦部署,程序将“永远在线”。这可能看起来有点基础,但我的大部分开发经验都是与Web应用程序相关的。线程/等等对我来说还是有点陌生??。我已经研究过,但我发现的大部分答案都与用户交互和顺序用例有关——它只是一个连续运行两个不同进程的系统,需要独立地与世界交互。我发现的潜在解决方案可能涉及多线程或某种MDI,或者有人建议使用DockPanelSuite(尽管在超级企业环境中,下载第三方文件说起来容易做起来难)。staticclassProgram{//////应用程序的主要入口点。///[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//而不是指定frmOne或frmTwo,//加载两个winforms并保持它们运行。Application.Run(newfrmOne());您可以创建一个新的ApplicationContext来表示多种形式:publicclassMultiFormContext:ApplicationContext{privateintopenForms;publicMultiFormContext(paramsForm[]forms){openForms=forms.Length;foreach(varforminforms){form.FormClosed+=(s,args)=>{//当我们关闭最后一个“起始”表单时,//结束程序。if(Interlocked.Decrement(refopenForms)==0)退出线程();};形式.显示();}}}使用这个你现在可以写:Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newMultiFormContext(newForm1(),newForm2()));如果你真的需要两个窗口/窗体在两个独立的UI线程上运行,你可以这样做:staticclassProgram{[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);varthread=newThread(ThreadStart);//允许带有ApartmentState.STA的UI虽然上面的[STAThread]应该给你thread.TrySetApartmentState(ApartmentState.STA);线程。开始();Application.Run(newfrmOne());}privatestaticvoidThreadStart(){Application.Run(newfrmTwo());//假设你不需要两个不同的进程,你只使用2个进程,因为你想要有两个不同的表单,并且希望能够保持应用程序运行,直到两个表单都退出另一种解决方案依赖于Form.Closed事件机制。您可以添加一个事件处理程序,它允许您指定关闭表单时要执行的操作。例如,当两个窗体都关闭时退出应用程序。在一些代码术语中publicForm1(){InitializeComponent();_form2=新的Form2();_form2.Show(这个);this.Closed+=Form1Closed;_form2.Closed+=Form2Closed;}protectedoverridevoidOnFormClosing(FormClosingEventArgse){e.Cancel=true;隐藏();Form1Closed(这个,newEventArgs());base.OnFormClosing(e);}privatevoidForm1Closed(objectsender,EventArgseventArgs){form1IsClosed=true;尝试退出应用程序();voidForm2Closed(objectsender,EventArgseventArgs){_form2IsClosed=true;尝试退出应用程序();}privatevoidTryExitApplication(){if(form1IsClosed&&_form2IsClosed){Dispose();应用程序.退出();结构,使其成为更好的解决方案。更新Servy提供的评论让我修改了这个“应该是简单的解决方案”以指出他的解决方案比这个更好。既然支持留答案,我就用这个答案,同时解决在求这个解决方案的过程中遇到的问题:以上是C#学习教程:同时运行两个winform窗口。有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢