|
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>
|