我有一个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();
答案 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进程后继续直接运行,它不会等待此进程完成。