簡體   English   中英

運行命令並等待c#中的完成

[英]Run commands and wait for completion in c#

我需要在我的c#程序中執行此操作。

           Process process = LaunchCommandWindow("Special args and environment set")
           process.StandardInput.WriteLine("cmd1");
           process.StandardInput.WriteLine("cmd2");

           //Parse logs
            using (Streamreader sr =  new ())
           { etc etc..}

我的命令正確執行,但問題是Parse日志代碼不等待cmd1和cmd2執行完成。 我不能打電話給退出和處理。 waitforexit因為在解析日志后,我有更多的命令要執行。

以下是如何設置流程啟動信息。 LaunchCommandWindow()

         ProcessStartInfo startInfo = new ProcessStartInfo();

        startInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe");
        startInfo.Arguments = "/K " + newEnvironmentArgs;

        startInfo.UseShellExecute = false; 
        startInfo.RedirectStandardInput = true;
        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();

        return process;

如何獲取解析日志代碼以等待cmd2完成?

謝謝。

如果“cmd2”將完成寫入標准輸出流,您可以監聽標准輸出,直到看到該事件,然后從那里進行處理。

創建一個新線程來運行任務。

使用BackgroundWorker

完成后,它會引發一個事件(在您的主線程中),您可以從該事件繼續運行。

這將阻止您的程序掛起,如果還有其他工作要做,它可以允許您在另一個線程運行時執行此操作。

這是一個教程

- - -編輯 - - -

經過進一步的研究,以下是對其余部分的思考:如果要讀取輸出,則必須將RedirectStandardOutput設置為true。

如果你沒有運行在同一窗口中兩個命令,你可以調用process.WaitForExit(int)其中int是等待的毫秒數,然后啟動一個新的進程(或process與新參數)火CMD2 。

我認為Process.WaitForExit()方法正是您所需要的。 還有Process.HasExited屬性。
對於啟動使用類似“cmd / C cmd1&cmd2”的東西

暫無
暫無

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

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