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

从c#中的cmd.exe返回后使窗体处于活动状态?,c#,winforms,cmd,C#,Winforms,Cmd,我有一个c#win forms程序,在我点击一个按钮后,它会启动一个windows应用程序,然后当我完成后,我想关闭该应用程序并返回我的win form。当我关闭启动的应用程序时,我的赢单似乎总是被一直推到后面,我必须寻找它。有什么想法吗 var process1 = new System.Diagnostics.Process(); process1.EnableRaisingEvents = false; var leftPath = @"c:\codereview\" + curDate

我有一个c#win forms程序,在我点击一个按钮后,它会启动一个windows应用程序,然后当我完成后,我想关闭该应用程序并返回我的win form。当我关闭启动的应用程序时,我的赢单似乎总是被一直推到后面,我必须寻找它。有什么想法吗

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();

尝试在窗体上调用该方法。请注意,根据操作系统的不同,这可能只是在任务栏中刷新表单。如果是这样的话,你可能需要借助一些互操作来将你的应用程序放在windows堆栈的顶端。

我想我看你的代码并不能真正理解你想要做什么。 您似乎一方面创建了一个空流程(process1),但随后手动启动另一个流程(通过直接调用static process.start方法)。process1引用没有执行任何操作

尝试完全删除引用process1的代码,只保留创建cmdline和调用进程的部分。开始:

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进程后,您的代码将直接继续运行,它不会等待此进程完成。

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


还有一个观察。不要使用
“a”+b+“c”+d
而使用
string.Format(“a{0}c{0}”,b,d)
-这具有更好的性能,而且耗时更少。

Er,string.Format较慢:请参阅。(这是一个遗憾,出于各种原因,我更喜欢它。)@Jeremy:时间消耗几乎是一样的,至于内存使用,string.Format更好。
“a”+b+“c”+d
将由编译器重写为
string.Concat(“a”,b,“c”,d)
,这将导致一次分配。Rico在他的博客文章中说,
string.Format
在内存消耗和速度方面都较差。