2016-09-02 7 views
0

多分私はここで間違ったアプローチをしています。私は装置を構成するプログラムを実行する必要があります。これは "バックグラウンド"とその基本的に非バッチプログラムで実行されなければならないので、ユーザーからのループで一定の入力を受け取ります。私は以下のコードを書いてプロセスを起動し、そこから読み書きを試みましたが、動作しません。プログラムが正しく起動していることは分かっていますが、プログラムが終了するまでは出力がありません。間違って何かしていますか?VB.Net非バッチプログラムを実行するプロセス

Dim proc As Process 
Dim prompt As String 


Public Sub New() 
    proc = New Process() 

    AddHandler proc.OutputDataReceived, AddressOf CallbackDataReceived 
    AddHandler proc.ErrorDataReceived, AddressOf CallbackErrorDataReceived 

    prompt = "" 

    Dim pi As ProcessStartInfo = New ProcessStartInfo() 
    pi.UseShellExecute = False 
    pi.FileName = "processname and location" 
    pi.RedirectStandardInput = True 
    pi.RedirectStandardOutput = True 
    pi.RedirectStandardError = True 
    pi.CreateNoWindow = True 
    proc.StartInfo = pi 
    proc.EnableRaisingEvents = True 
    StartProcess() 

    proc.BeginOutputReadLine() 
End Sub 

Public Sub StartProcess() 
    proc.Start() 
End Sub 

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

Private Sub CallbackErrorDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

答えて

0

出力が空のときに印刷を試みます。ブレークポイントを設定し、ステップ実行してください。この

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

この

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

に変更し、これは多くの次回をするのに役立ちます。

また、出力は新しい行の後に受信されます。代わりにWriteLineをお勧めします。プロセスが改行文字を送らなければ何も受け取らないと思う。

+0

これは問題ではなく、私の提出の誤植です。私のコードにはもともと「Not」がありました。私は新しいラインを送ろうとしましたが、ダイスはまだありません。イベントは起動しません。 –

+0

@DanielMossあなたのコードをコピー/ペーストし、Notを付けてIpConfigと呼んでいました。タイプミスがあった場合、私は同じプログラムをまったくデバッグしているのだろうかと思います。 –

+0

異なる問題。 IPConfigはバッチコマンドであり、実行を終了します。サーバーにtelnetのようなものを使用しようとしており、コマンドを継続して送信し、入力を受けたいとします。プログラムのように入力ループがあります。 –

関連する問題