我的应用程序定期使用 process.start 启动控制台程序。我需要“实时”监控程序的输出。
例如,程序将以下文本写入控制台:处理中......
每隔一秒左右就会出现一个新点,让用户知道程序仍在处理中。但是,...在程序输出 CR/LF 之前,我无法检索程序的标准输出(当它仍在运行时)。
我可以做些什么来实时获取输出 - 比如说 - 将它输送到数据库中,例如在 VB.NET 中?
我的应用程序定期使用 process.start 启动控制台程序。我需要“实时”监控程序的输出。
例如,程序将以下文本写入控制台:处理中......
每隔一秒左右就会出现一个新点,让用户知道程序仍在处理中。但是,...在程序输出 CR/LF 之前,我无法检索程序的标准输出(当它仍在运行时)。
我可以做些什么来实时获取输出 - 比如说 - 将它输送到数据库中,例如在 VB.NET 中?
将输出发送到文本文件并每秒读取该文件怎么样?
我很沮丧,因为我在家里确实有一个原型应用程序做了这样的事情。我看看能不能拿 同时看看这个链接:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
它展示了如何将应用程序的输出重定向到自定义流,例如
Public Class Form1
Private _p As Process
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim psi As New ProcessStartInfo()
psi.FileName = "C:\mydir.bat"
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
_p = New Process()
_p.Start(psi)
tmrReadConsole.Enabled = True
End Sub
Private Sub tmrReadConsole_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrReadConsole.Tick
If _p IsNot Nothing Then
txtConsoleOutput.Text = _p.StandardOutput.ReadToEnd()
End If
End Sub
End Class
以上是一个带有计时器的网络表单,用于轮询控制台的输出流并将其内容放入文本框中。它不太有效(因此我想找到我的其他应用程序),但你明白了。
希望这可以帮助。