VB.NET: 如何在其他子循环中保持主窗体控制?
VB.NET: How to maintain main form control during loops in other sub?
我有一个只有一种形式的程序。
通过按下按钮,它会启动 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
问题是当执行这个循环时,文本框和进度条会更新,但不能修改主窗体。实际上用户根本无法控制。因此,如果我想在主窗体中为 stop/pause ffmpeg 创建一个按钮,则不能像主窗体上的任何其他按钮一样按下。
有一种方法可以在其他 Sub 内部维护循环,而不会在主窗体处于 运行 时松散控制?
我试图通过调用另一个带有文本框和进度条的对话框来修复它。但即使是这种形式也完全失去了控制,直到过程结束。
要将 pause/stop 转换发送到 ffmpeg(在没有 window 的情况下运行)是否正确使用:
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
或者必须指定这个key发送给当前的运行进程?
解决了主控无法控制的问题window...
只需使用 BackgroundWorker。
我有一个只有一种形式的程序。 通过按下按钮,它会启动 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
问题是当执行这个循环时,文本框和进度条会更新,但不能修改主窗体。实际上用户根本无法控制。因此,如果我想在主窗体中为 stop/pause ffmpeg 创建一个按钮,则不能像主窗体上的任何其他按钮一样按下。
有一种方法可以在其他 Sub 内部维护循环,而不会在主窗体处于 运行 时松散控制?
我试图通过调用另一个带有文本框和进度条的对话框来修复它。但即使是这种形式也完全失去了控制,直到过程结束。
要将 pause/stop 转换发送到 ffmpeg(在没有 window 的情况下运行)是否正确使用:
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
或者必须指定这个key发送给当前的运行进程?
解决了主控无法控制的问题window...
只需使用 BackgroundWorker。