2014-10-31 112 views
2

我有重定向實時過程輸出的一個問題,我運行一個Java的.jar文件從 vb.net的過程,我想重定向它。我用richtextbox創建了一個控制檯表單。 參數很長,所以我不寫在那裏。該代碼(它不是重定向任意):VB.net重定向實時過程輸出

console.show() 'Console is a console window... 
dim p as new process 
p.startinfo.filename = java '(java as string: C:\Program Files\java....) 
p.startinfo.argument = "-Xms2048M -Xmx4096M...." 
p.startinfo.redirectstandardoutput = true 
'what is comme there? 
console.richtextbox1.text = 'and here is a redirected output, but i want redirect real time. 

Thx任何想法和有用的答案!

回答

2

問題解決了,答曰:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

dim p as process() 
p.startinfo.filename = "xyz" 
p.startinfo.arguments = "...." 
p.startinfo.workingdirectory = "some path" 
p.startinfo.redirectstandarderror = true 
p.startinfo.redirectstandardoutput = true 
p.enableraisingevents = True 
Application.DoEvents() 
AddHandler proc.ErrorDataReceived, AddressOf proc_OutputDataReceived 
AddHandler proc.OutputDataReceived, AddressOf proc_OutputDataReceived 
p.start() 
proc.BeginErrorReadLine() 
proc.BeginOutputReadLine() 

End Sub 

Delegate Sub UpdateTextBoxDelg(text As String) 
    Public myDelegate As UpdateTextBoxDelg = New UpdateTextBoxDelg(AddressOf UpdateTextBox) 
    Public Sub UpdateTextBox(text As String) 
     Console.RichTextBox1.Text += text & Environment.NewLine 
     Console.RichTextBox1.SelectionStart = Console.RichTextBox1.Text.Length 
     Console.RichTextBox1.ScrollToCaret() 
    End Sub 

    Public Sub proc_OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) 
     If Me.InvokeRequired = True Then 
      Me.Invoke(myDelegate, e.Data) 
     Else 
      UpdateTextBox(e.Data) 
     End If 
    End Sub 
0

你忘了開始這個過程。

p.Start() 
+0

好吧,是的,我忘了,但是這不回答這個問題。 – ProGamingHun 2014-10-31 15:20:05

+0

@ProGamingHun你說這不起作用。這是你當前代碼的原因。 – 2014-10-31 15:26:21

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – PaulG 2014-10-31 15:31:23