2016-03-29 23 views
1

C# winform'umdan bazı c kodu içeren bir exe dosyası çalıştırıyorum ancak c kodunun tam çıktısını yalnızca exe uygulamasının tamamlanmasından sonra elde ediyorum. Exe'nin çıktısını eşzamanlı olarak winformuma aktarmasını istiyorum (hat gerçek zamanlı olarak). gevşek this example den uyarlanmıştırBir işlemin sınamalarını okuma zamanları

var proc = new Process 
     { 
      StartInfo = new ProcessStartInfo 
      { 
       FileName = "background.exe", 
       Arguments = command, 
       UseShellExecute = false, 
       RedirectStandardOutput = true, 
       CreateNoWindow = true 
      } 
     }; 


     proc.Start(); 
     while (!proc.StandardOutput.EndOfStream) 
     { 
      ConsoleWindow.AppendText(proc.StandardOutput.ReadLine()); 
      ConsoleWindow.AppendText(Environment.NewLine); 

     } 
+0

Bazı c kodları ne demek istiyorsun? * İşlemi * işleme koymadıkça çıktıya hiçbir metin yazılmaz. Background.exe dosyasının kodunu kontrol etmelisiniz. Ve 'background.exe' aslında bir derlenmiş, ikili yürütülebilir dosya ve farklı bir uzantı –

+0

ile bir C dosyası olduğundan emin olun Bu [soru] (http://stackoverflow.com/questions/285760/how- bir-işlem-ve-yakalamak-onun-stdout-in-net) ve bu [soru] (http://stackoverflow.com/questions/18588659/redirect-process-output-c-sharp)? –

+0

Tüm kod örneklerini kontrol ettiler ve çıktıları yalnızca işlem bittikten sonra okuyorlar. –

cevap

0

bu deneyin: Eğer sağlamak zorunda, konsoldan çıktısını alır olay işleyicisi farklı bir iş parçacığı üzerinde yürütme olduğunu

private void button1_Click(object sender, EventArgs e) 
    { 
     var consoleProcess = new Process 
     { 
      StartInfo = 
      { 
       FileName = 
        @"background.exe", 
       UseShellExecute = false, 
       RedirectStandardOutput = true 
      } 
     }; 

     consoleProcess.OutputDataReceived += ConsoleOutputHandler; 
     consoleProcess.StartInfo.RedirectStandardInput = true; 
     consoleProcess.Start(); 
     consoleProcess.BeginOutputReadLine(); 
    } 

    private void ConsoleOutputHandler(object sendingProcess, 
     DataReceivedEventArgs outLine) 
    { 
     // This is the method in your form that's 
     // going to display the line of output from the console. 
     WriteToOutput(outLine.Data); 
    } 

Not neyse form üzerindeki çıktının UI iş parçacığı üzerinde gerçekleşmesini görüntülemek için kullanın.

İlgili konular