У меня есть программа Win Forms С#, и после того, как я нажимаю кнопку, она запускает приложение Windows, а затем, когда я закончу, я хочу закрыть приложение и вернуться к моей форме выигрыша. Когда я закрываю запущенное приложение, кажется, что моя форма выигрыша всегда отодвигается полностью назад, и мне приходится искать ее. Любые идеи?
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();
Ответ 1 · рейтинг 1 · Franci Penov
Попробуйте вызвать метод Activate() на ваша форма. Обратите внимание, что в зависимости от ОС это может просто мигать формой на панели задач. Если это так, вам, возможно, придется прибегнуть к некоторому взаимодействию, чтобы вывести ваше приложение на вершину стека Windows.
Ответ 2 · рейтинг 1 · serhio
используйте process.WaitForExit(), затем this.Focus() // or this.Select()
И еще одно наблюдение. Вместо использования "a" + b + "c" + d используйте string.Format("a{0}c{0}", b, d) - это дает лучшую производительность и требует меньше времени.
Ответ 3 · M-Peror
Я думаю, что не совсем понимаю, что вы пытаетесь сделать, глядя на ваш код. Кажется, вы создаете пустой процесс с одной стороны (process1), но затем запускаете другой вручную (путем прямого вызова статического метода Process.Start). Ссылка на процесс1 ничего не делает.
Попробуйте полностью стереть код, ссылающийся на process1, и оставить только часть, создающую командную строку и вызывающую 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, он не будет ждать завершения этого процесса.