簡體   English   中英

異步執行系統命令而不阻塞UI並強制退出進程

[英]Executing system command asynchronously without blocking UI and exiting the process forcefully

我在C#上有一個WPF應用程序,我需要執行一個永遠不存在的系統命令(因為它等待您按Q )。 我想在第一次收到輸出后強行退出它,並且我也不想阻塞WPF UI,所以我想異步執行此操作(我相信線程會使事情變得更復雜)。

這就是我現在所擁有的:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C " + command;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

上面的代碼有2個問題:它阻塞了UI,並且從不獲取輸出(該過程不會退出)。

注意:我使用WaitForExit()是因為在繼續之前需要輸出。

  1. 使用BackgroundWorker類在單獨的線程上運行進程。 這將防止阻塞UI。
  2. 看一下Process.OutputDataReceived Event ,它在應用程序寫入其重定向的StandardOutput流時發生。 因此,即使過程未停止,也可以獲取輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM