簡體   English   中英

System.Diagnostic.Process中的死鎖

[英]Deadlock in System.Diagnostic.Process

我有一個小的控制台應用程序,我想讀取C#中的輸出。 因此我創建了此代碼段。 命令提示符將打開,但不顯示任何內容。

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
process.StartInfo.FileName = DirectoryPath + "Test.exe";
process.StartInfo.Arguments = "-showAll";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.WaitForExit(2000);
String strOutput = process.StandardOutput.ReadToEnd();

如果我刪除UseShellExecuteRedirectStandardOutput和最后一行,命令提示符將打開並顯示Test.exe ,但我需要輸出為String,因此我必須使用這些屬性來讀取StandardOutput

我也嘗試將超時設置為2秒( process.WaitForExit(2000) ),但空命令提示符在2秒后沒有關閉。

如果我在調試模式下手動關閉空命令提示符,則變量strOutput具有我請求的信息。

為避免死鎖,您必須在等待退出之前讀取輸出流。 所以嘗試:

    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
    process.StartInfo.FileName = DirectoryPath + "Test.exe";
    process.StartInfo.Arguments = "-showAll";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.Start();
    String strOutput = process.StandardOutput.ReadToEnd();
    process.WaitForExit();

暫無
暫無

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

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