从c#中的cmd.exe返回后使表单处于活动状态?

时间:2009-12-18 15:49:46

标签: c# winforms cmd

我有一个c#win forms程序,点击一个按钮后启动一个Windows应用程序然后当我完成后,我想关闭应用程序并返回我的win表单。当我关闭启动的应用程序时,我的胜利形式似乎总是被推到后面,我必须寻找它。有任何想法吗?

var process1 = new System.Diagnostics.Process();
process1.EnableRaisingEvents = false;

var leftPath = @"c:\codereview\" + curDateTime + @"\left\";
var rightPath = @"c:\codereview\" + curDateTime + @"\right\";
var execPath = @"c:\program files\winmerge\winmergeu.exe";
var strCmdLine = "/C " + '"' + execPath + '"' + " /r " + leftPath + " " + rightPath;
System.Diagnostics.Process.Start("CMD.exe", strCmdLine);
process1.Close();

3 个答案:

答案 0 :(得分:1)

尝试在表单上调用Activate()方法。请注意,根据操作系统,这可能只是在任务栏中闪烁表单。如果是这种情况,您可能不得不求助于一些互操作将您的应用程序放在Windows堆栈的顶部。

答案 1 :(得分:1)

使用process.WaitForExit()然后this.Focus() // or this.Select()

另一个观察。而不是使用"a" + b + "c" + d使用string.Format("a{0}c{0}", b, d) - 这会有更好的性能,而且耗时更少。

答案 2 :(得分:0)

我认为我并没有真正得到你想要做的事情,看着你的代码。 您似乎一方面创建了一个空进程(process1),然后手动启动另一个进程(通过直接调用静态Process.Start方法)。 process1引用没有做任何事情。

尝试完全删除代码引用process1,并仅保留创建cmdline的部分并调用Process.Start:

var leftPath = @"c:\codereview\" + curDateTime + @"\left\";
var rightPath = @"c:\codereview\" + curDateTime + @"\right\";
var execPath = @"c:\program files\winmerge\winmergeu.exe";
var strCmdLine = "/C " + '"' + execPath + '"' + " /r " + leftPath + " " + rightPath;
System.Diagnostics.Process.Start("CMD.exe", strCmdLine);

请注意,该过程是异步启动的。您的代码将在创建cmd进程后继续直接运行,它不会等待此进程完成。