如何在新进程中启动Form2?

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

标签。
Form2 f2 = new Form2();
f2.Show();
this.Hide();

但在这种情况下,对我不利。

我需要在一个新的进程中开始(作为另一个.exe文件)。

那么,我该如何做呢?

[更新]

我忘记告诉你,我需要将一些信息传递给form2,例如

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

2
你为什么想要这样做? - Joe
3
如果你真的需要这个,你可以按照@Tomtom的回答继续进行;或者在你的“main”函数中添加功能,使用一个参数来调用“.exe”表示你需要打开的表单。但如果你还想传递数据的话,这似乎非常困难(也是不必要的)。 - chaliasos
不错的想法,我正在考虑。 - davidgereb
如果你真的需要使用不同的进程,请尝试这个... https://dev59.com/DHVD5IYBdhLWcg3wL4qM - Machinarius
3个回答

4

您可以在单独的项目中创建 Form2,并通过调用已构建的 exe 文件来使用它:

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

我会这样做,就像@Schaliasos所说的那样。 - davidgereb

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

 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

1
他说的是新的“进程”,而不是新的“线程”。这两者之间有很大的区别。 - Servy
1
是的,但有时候人们不知道线程和进程的区别。因此,这个差别并不是那么“巨大”。 - CSharpie
1
是的,区别很大。人们混淆这两个概念并不意味着它们之间没有很大的区别。如果你怀疑 OP 的意思是他想要另一个进程,那么你可以考虑发表评论,问一下他是否确定他是想要进程而不是线程。由于问题非常明确地表示需要一个新进程而不是一个新线程,所以这个答案显然是错误的。如果 OP 意识到自己犯了错,并编辑问题以表明他想要一个新线程而不是一个新进程,则此类答案就会合适。 - Servy
是的,但我真正的意思是“进程”而不是“线程”,我知道它们之间的区别。 :) 但还是谢谢你的时间。 - davidgereb
@Servy 这就是为什么我写了:_如果_你的意思是开启一个新线程,那么这样做: - CSharpie
谢谢@Servy。你知道我在说什么。 - davidgereb

0
创建窗体实例并在单独的线程中显示。
new Thread(() => {
    Form2 f2 = new Form2(someInformation);
    f2.ShowDialog();
}).Start();

这应该如何工作?我是从一个正在进行ShowDialog的表单中启动它的,它显示出来然后就消失了... - Gonzo345

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接