【问题标题】:How to start form2 in new process?如何在新进程中启动form2?
【发布时间】:2013-04-06 03:25:02
【问题描述】:

我有一个项目有两个表单,我需要在一个新进程中启动 form2,我该怎么做? 我知道有

Form2 f2 = new Form2();
f2.Show();
this.Hide();

但在这种情况下,这对我不利。 我需要启动一个新进程(作为另一个 .exe 文件)。

那么我该怎么做呢?

[更新]

我忘了告诉你我需要向form2传递一些信息,比如

Form2 f2 = new Form2(someInformation);
f2.Show();
this.Hide();

【问题讨论】:

  • 你为什么要这么做?
  • 如果您真的需要这个,您可以继续使用@Tomtom 回答,或者您可以在main 中添加功能以使用代表您需要打开的表单的参数调用.exe。但是,如果您还想传递数据,这似乎真的很困难(而且没有必要)。
  • 不错的主意,我正在考虑。
  • 如果你真的需要使用不同的进程,试试这个...stackoverflow.com/questions/56121/…

标签: c# .net winforms process exe


【解决方案1】:

创建表单的实例并将其显示在单独的线程中。

new Thread(() => {
    Form2 f2 = new Form2(someInformation);
    f2.ShowDialog();
}).Start();

【讨论】:

  • 这应该如何工作?我从一个实际上是 ShowDialog'd 的表单中启动它,它显示并消失......
【解决方案2】:

如果您指的是新线程,请执行以下操作:

 var secondFormThread = new Thread(() => Application.Run(new Form(someInformation)));

 this.Hide();                       // Hide the current form

 secondFormThread .Start();         // now show the other one in a new thread
 secondFormThread .WaitForExit();   // wait for this thread to finish or
                                    // maybenot, may add a timeout. Whatever 
                                    // suits your needs.

 this.Show();                       // Show the first form again

【讨论】:

  • 他说的是新的进程,而不是新的线程。两者之间存在巨大的差异。
  • 是的,但有时人们不知道线程和进程之间的区别。所以差异不是那么巨大 ...
  • 是的,差别很大。人们将两者混淆的事实并不意味着它没有很大的区别。如果您怀疑 OP 意味着他想要另一个进程,那么您可以考虑发表评论,询问他是否确定他的意思是进程与线程。事实上,这个问题非常很清楚,它想要一个新进程,而不是一个新线程,所以这个答案显然是不正确的。如果 OP 意识到他犯了一个错误并编辑问题以表明他想要一个新线程,而不是一个新进程,那么这将做出这样的适当答案。
  • 是的,但我的意思是 process 而不是 thread,我知道它们之间的区别。 :) 但是感谢您的宝贵时间。
  • @Servy 这就是我写的原因:万一你的意思是一个新线程,这样做:
【解决方案3】:

您可以在单独的项目中创建您的 Form2 并通过调用构建的 exe 文件

System.Diagnostics.Process.Start("Form2.exe");

【讨论】:

  • 我会这样做,但就像@Schaliasos 所说的那样。
猜你喜欢
  • 2018-10-28
  • 2011-08-24
  • 1970-01-01
  • 2019-03-08
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多