Süreç sınıfını kullanarak bir konsol uygulaması oluşturduğum bir GUI uygulamasına sahibim. Kısmen C# uygulamasından oluşturulan başka bir işlemin standart çıktısını kısmen okuyor
Process p1 = new Process();
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.StartInfo.CreateNoWindow = true;
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.FileName = Path.Combine(basepath, "abc.exe");
p1.StartInfo.Arguments = "/pn abc.exe /f \"temp1.txt\"";
p1.StartInfo.RedirectStandardError = true;
p1.StartInfo.RedirectStandardInput = true;
p1.StartInfo.RedirectStandardOutput = true;
p1.OutputDataReceived += new DataReceivedEventHandler(outputreceived);
p1.ErrorDataReceived += new DataReceivedEventHandler(errorreceived);
p1.Start();
tocmd = p1.StandardInput;
p1.BeginOutputReadLine();
p1.BeginErrorReadLine();
Şimdi ben o zaman uyumsuz konsol çıktısını okur da, bir sorun var ama iç tampon bazı miktarı ile doldurulur sadece olayı gibi görünüyor. Verileri geldiğinde görüntülemek istiyorum. Tamponda 10 bayt varsa, 10 bayt göstermesine izin verin. Programım dahili olarak sleep() çağrısını uygular, böylece uykuya kadar veriyi yazdırmam gerekir.
Nasıl yapabilirim? çıkış hattı tamponlanır de belirtildiği gibi
=============
, kod
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.StartInfo.CreateNoWindow = true;
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.FileName = Path.Combine(basepath, "abc.exe");
p1.StartInfo.Arguments = pnswitch + " /f \"temp1.txt\"";
p1.StartInfo.RedirectStandardError = false;
p1.StartInfo.RedirectStandardInput = true;
p1.StartInfo.RedirectStandardOutput = true;
p1.Start();
tocmd = p1.StandardInput;
MethodInvoker mi = new MethodInvoker(readout);
mi.BeginInvoke(null, p1);
ve okuma içinde aşağıdaki değişiklik çalıştı ı yazdı
void readout()
{
string str;
while ((str = p1.StandardOutput.ReadLine()) != null)
{
richTextBox1.Invoke(new UpdateOutputCallback(this.updateoutput), new object[] { str });
p1.StandardOutput.BaseStream.Flush();
}
}
Yani ben her satırı yazıldığında şimdi izler düşünmek ve bunu doğru yazdırır? Bu da işe yaramadı. Orada bir şey var mı?
ben kendi okuyucusunu yapma konusunda nasıl gidebiliriz gibi herhangi bir fikir mi? Stdoutput akışını izleyen ve bazı verileri olduğunda her zaman okuyan bir işlev yazamaz mıyım? –
Evet, bu fikir. StandardOutput'ı başka bir iş parçacığından okursunuz. – leppie
Kodu değiştirdim ve satır okumayı tamamladım. bir göz atabilir misin? –