2

Perl スクリプトを実行し、標準出力を読み取って使用する VB .NET プログラムを作成しようとしています。印刷時に各行を個別に処理し、それに応じてプログラムの表示を更新できるようにしたいと考えています。これが私が「書いた」コードです(「ほとんどインターネットからコピーされた」と読んでください):

Private WithEvents pscript As Process

Private Sub myProgram_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    pscript = New Process()
    pscript.StartInfo.CreateNoWindow = True
    pscript.StartInfo.FileName = "C:\perl64\bin\perl.exe"
    pscript.StartInfo.Arguments = "C:\test.pl"
    pscript.StartInfo.UseShellExecute = False
    pscript.StartInfo.RedirectStandardOutput = True
    pscript.StartInfo.RedirectStandardInput = True
    AddHandler pscript.OutputDataReceived, AddressOf pscript_output_process
    pscript.Start()
    pscript.BeginOutputReadLine()
End Sub

Private Sub pscript_output_process(sender As Object, e As DataReceivedEventArgs)
    MessageBox.Show(e.Data)
End Sub

これには 1 つの問題があります。プログラムは、テスト スクリプトの実行が完了するまで待機し、その後、いくつかの OutputDataReceived イベントを次々に発生させます。これは、実際のスクリプトを使用するようにすると、かなり規則的な間隔で出力されていたにもかかわらず、数時間も何もせず、一度に 5,000 件のイベントを処理しなければならない可能性が高いことを意味します。その間ずっと。

最後にすべてを一度にではなく、書かれたときにテキストの各行を処理する方法はありますか?

4

2 に答える 2

1

インターネットからさらに多くのものをコピーすることで、それを修正する方法を見つけました。問題は Perl にあるようで、通常、各 print ステートメントの後に標準出力をフラッシュしません。最後の文が何を意味するのかはよくわかりませんが、とにかく、local $| = 1;スクリプトの先頭に行を追加すると(私が読んだサイトによると、標準出力を自動的にフラッシュします)、問題が解決します。

于 2012-04-28T07:05:33.550 に答える
0
While (pscript.HasExited = False)
    Dim sLine As String = pscript.StandardOutput.ReadLine
End While
于 2012-04-27T22:56:37.857 に答える