如何使用Windows应用程序启动控制台应用程序和读取(监视)命令行 - 在C#中一行行实时

我有一个由线产生的行线控制台应用程序: 数据1 数据2 数据3 ... 和当它的命令行将被清除时,它会无限次重复(数据可以更改) 我必须实时观看控制台应用程序的命令行并使用Windows应用程序,并为线数据工作(例如,将它逐行保存到列表中)!有可能的?如何使用Windows应用程序启动控制台应用程序和读取(监视)命令行 - 在C#中一行行实时

回答:

您基本上需要订阅该控制台应用程序的输出流,以便能够在控制台上打印每行。

你需要做的是创建Windows窗体应用程序(WPF也可以)并从那里启动控制台应用程序。

如果您不想将当前控制台应用程序显示为可见窗口,请记住将CreateNoWindow设置为true。

以下是如何启动控制台应用程序:

我们需要一个BackgroundWorker来读取在后台控制台应用程序的输出。

outputReader = TextReader.Synchronized(currentProcess.StandardOutput); 

outputWorker.RunWorkerAsync();

现在,您可以实时获得控制台应用程序的所有输出,并使用它来创建列表或任何您想要的内容。

void outputWorker_DoWork(object sender, DoWorkEventArgs e) 

{

// Work until cancelled

while (outputWorker.CancellationPending == false)

{

int count = 0;

char[] buffer = new char[1024];

do

{

StringBuilder builder = new StringBuilder();

// Read the data from the buffer and append to the StringBuilder

count = outputReader.Read(buffer, 0, 1024);

builder.Append(buffer, 0, count);

outputWorker.ReportProgress(0, new OutputEvent() { Output = builder.ToString() });

} while (count > 0);

}

}

已处理的数据可通过BackgroundWorker的ProgressChanged事件获得。

void outputWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 

{

if (e.UserState is OutputEvent)

{

var outputEvent = e.UserState as OutputEvent;

/* HERE YOU CAN USE THE OUTPUT LIKE THIS:

* outputEvent.Output

*

* FOR EXAMPLE:

* yourList.Add(outputEvent.Output);

*/

}

}

上面的代码取和修改,以你的目的在情况下,下面Codeproject.com文章它就不再在未来存在:Embedding a Console in a C# Application。

以上是 如何使用Windows应用程序启动控制台应用程序和读取(监视)命令行 - 在C#中一行行实时 的全部内容, 来源链接: utcz.com/qa/258109.html

回到顶部