VB.NET:如何保持其他子循环中主要形式的控制?(VB.NET: How to maintain

2019-10-21 17:59发布

我有一种形式的程序。 通过按下一个按钮,它启动的ffmpeg转换。

在的主要形式,在文本框,FFMPEG统计信息输出。 这通过采取从StandardError的ffmpeg的输出是可能的。

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这不能压为主要形式的任何东西。

有保持其他子内循环,而不主要形式的松散的控制,而他们正在运行的方法吗?

我试图通过调用文本框和进度条另一个对话框的形式来解决它。 但即使是这种形式完全失去控制,直到处理完毕。

要发送暂停/停止转换的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

或者必须指定,这个密钥发送给当前正在运行的进程?

Answer 1:

解决了这个问题对主窗口没有控制...

只需使用一个BackgroundWorker。



文章来源: VB.NET: How to maintain main form control during loops in other sub?