Мне нужно создать приложение, которое запускает различные команды (PowerShell.exe, ipconfig и т. д.), но при вызове ExecuteCommand пользовательский интерфейс зависает до завершения работы.
Пытался запустите метод, используя await proc.StandardOutput.ReadToEndAsync(), но он не работает. (зависает на указанной строке и не продолжается на следующей строке)
Что я делаю не так?
Заранее спасибо.
ExecuteCommand:
public static async Task ExecuteCommand(string command)
{
try
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardInput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
var message = proc.StandardOutput.ReadToEndAsync();
//var error = await proc.StandardError.ReadToEndAsync();
proc.Close();
//var errorContent = error;
return message.Result;
}
catch (Exception objException)
{
return objException.Message;
}
}
Регистратор:
public void Logger(string value)
{
logtxt.AppendText("[" + DateTime.Now + "]: " + value + Environment.NewLine);
logtxt.SelectionStart = logtxt.Text.Length;
logtxt.ScrollToCaret();
}
Активен:
private async Task IsActive()
{
string text = await ExecuteCommand("PowerShell.exe -Command \"Get-VPNconnection -AllUserConnection\"");
Logger(text);
...more code...
}
Form1_Shown (я переместил приведенный ниже код из Form_Load, поскольку до появления пользовательского интерфейса требуется время):
private void Form1_Shown(object sender, EventArgs e)
{
if (IsActive().Result)
{
...more code...
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... -sharp-5-0
При использовании Diagnostics.Process блокируется пользовательский интерфейс в WinForms C# 5.0. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение