4
我有2個外部進程運行(2 console exe),提供輸出到控制檯。我在wpf應用程序上運行這些應用程序。我捕獲控制檯輸出並將其用作輸入。如何在wpf應用程序中運行其他控制檯進程之前等待控制檯進程完成?
這裏我怎麼做 1.運行第一個進程。捕獲控制檯輸出。 2.使用第一個過程輸出做一些工作。 3.運行第二個進程後,我做了一些工作輸出。
我遇到的問題是我必須等待其他進程完成並使用其輸出,然後才能運行其他進程。當我想運行第二個過程時,第一個過程沒有完成。
public MainWindow()
{
InitializeComponent();
ExtProcess1();
ExtProcess2(); //this is executed before ExtProcess1 OutputDataReceived is completely captured
Instance = this;
}
public static void ExtProcess1()
{
Process process = new Process();
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.Exited += new EventHandler(process_Exited);
process.StartInfo.FileName = "test.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.PriorityClass = ProcessPriorityClass.RealTime;
process.BeginOutputReadLine();
process.WaitForExit();
}
static void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (MainWindow.Instance.lbLog.Dispatcher.Thread == Thread.CurrentThread)
{
String s = (String)e.Data;
MainWindow.Instance.lbLog.Items.Add(s);
}
else
{
MainWindow.Instance.lbLog.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send,
new EventHandler<DataReceivedEventArgs>(corePingPid_OutputDataReceived), sender, new object[] { e });
}
}
如何強制wpf應用程序在運行第二個進程之前等待第一個進程?
這也是我使用的。只要小心一點,因爲它會鎖定你的GUI線程,如果你嘗試在那裏運行它。 – jocull 2010-11-02 05:42:31
我確實使用了process.waitforexit()。我也使用process.outputdatareceived,這是我捕獲控制檯輸出。 – 2010-11-02 06:17:39
@publicEnemy,你在哪裏開始你的第二個過程?在對第一個進程調用WaitForExit()之後,它應該在同一個線程上。 – VinayC 2010-11-02 06:26:29