我有一个只有一种形式的程序。通过按下按钮,将启动ffmpeg转换。
在主要形式的文本框中,输出ffmpeg统计信息。这可以通过从ffmpeg获取StandardError输出来实现。
Public Sub Console()
Dim Process As New Process
Process.StartInfo.UseShellExecute = False
Process.StartInfo.RedirectStandardError = True
Process.StartInfo.RedirectStandardOutput = True
Process.StartInfo.FileName = current_ffmpeg_path
Process.StartInfo.Arguments = input_params
Process.StartInfo.CreateNoWindow = True
Process.Start()
Dim ffmpeg_stats_output As System.IO.StreamReader = Process.StandardError
Do While Process.HasExited = False
[update all main form textboxes by taking input string from ffmpeg and elaborate it]
Loop
End Sub
问题在于,执行此循环时,将更新文本框和进度条,但不能修改主窗体。实际上,用户根本没有控制权。因此,如果我要创建一个按钮以停止/暂停ffmpeg的主要形式,则不能像其他任何形式按下该形式。
有没有一种方法可以维护其他Sub内部的循环而又不会在运行时随意控制主窗体?
我试图通过调用另一个带有文本框和进度条的对话框来修复它。但是,即使这种形式也无法完全控制,直到过程完成为止。
要将暂停/停止转换发送到ffmpeg(无需窗口运行)是否正确使用:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
SendKeys.Send("q")
SendKeys.Send("^s")
End Sub
还是必须指定将此密钥发送给当前正在运行的进程?
解决了主窗口无控制的问题...
只需使用BackgroundWorker。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句