Сделать форму активной после возвращения из cmd.exe в c #? - PullRequest
0 голосов
/ 18 декабря 2009

У меня есть программа для форм c # win, и после нажатия кнопки она запускает приложение 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 ]

1 голос
/ 18 декабря 2009

используйте process.WaitForExit(), затем this.Focus() // or this.Select()

И другое наблюдение. Вместо использования "a" + b + "c" + d используйте string.Format("a{0}c{0}", b, d) - это имеет лучшую производительность и требует меньше времени.

1 голос
/ 18 декабря 2009

Попробуйте вызвать метод Activate() в вашей форме. Обратите внимание, что в зависимости от ОС, это может быть просто мигать форму на панели задач. Если это так, вам, возможно, придется прибегнуть к некоторому взаимодействию, чтобы вывести ваше приложение на вершину стека Windows.

0 голосов
/ 18 декабря 2009

Мне кажется, я не понимаю, что вы пытаетесь сделать, глядя на ваш код. Вы, кажется, создаете пустой процесс с одной стороны (process1), но затем запускаете другой вручную (путем непосредственного вызова статического метода Process.Start). Ссылка на process1 ничего не делает.

Попробуйте полностью стереть код, ссылающийся на 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, он не будет ждать завершения этого процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...