C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■95289 / )  コマンドプロンプトで逐次的にデータを取得する方法
□投稿者/ aaap (9回)-(2020/07/11(Sat) 10:27:05)
2020/07/11(Sat) 10:33:15 編集(投稿者)
2020/07/11(Sat) 10:28:07 編集(投稿者)

<pre><pre>ありがとうございます。

少しはしょっていますが、コードは以下のような流れになっています。

仰る通り、
_proc.StandardInput.WriteLine("q")
に変更することで、プログラムを停止させることができるようになりました。
しかし、再度、プログラムを実行しようとすると

p.BeginErrorReadLine()


追加情報:非同期読み取り操作はストリーム上で既に開始されました。

というエラーが出てしまい、先に進みません。
と思ったのですが、

p = New System.Diagnostics.Process()

を最後に入れると、うまく再実行できるようになりました。




p.Kill()
p.WaitForExit()
p.Close()

の方も再度試してみましたが、上記で述べたように、
System.Diagnostics.Process()は停止するものの、
コマンドプロンプトは停止せず、FFmpegはバックグラウンドに残ってしまいます。

Catchもされていないようです。

一応、Qキーの方でうまくはいっているのですが
二つ目の方法がうまくいかないのは
何が原因でしょうか?



Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

バックグラウンドプロセス呼び出し

End Sub


Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

StopBool = True

End Sub




Public Sub バックグラウンドプロセス




p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec")


p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardError = True
p.StartInfo.RedirectStandardInput = True


AddHandler p.ErrorDataReceived, AddressOf p_OutputDataReceived


p.StartInfo.CreateNoWindow = False
p.StartInfo.Arguments = "/c ffmpeg xxxxx"

p.Start()

p.BeginErrorReadLine()

p.WaitForExit()

p.Close()


End Sub



  Public p As New System.Diagnostics.Process()
 
Public StopBool As Boolean = False



Private Sub p_OutputDataReceived(sender As Object, e As System.Diagnostics.DataReceivedEventArgs)


If StopBool = True Then


Dim method = 1

If method = 0 Then

Try
If p.StandardInput.BaseStream.CanWrite Then
p.StandardInput.WriteLine("q")

End If
Catch ex As System.Exception
End Try


Else


Try

p.Kill()
p.WaitForExit()
p.Close()
Catch ex As System.Exception

Dim hhh = 34

End Try



End If




End If
コードをテキストボックスに表示

End Sub</pre></pre>
返信 編集キー/


管理者用

- Child Tree -