VB.NET: Как сохранить основной контроль формы во время циклов в других подпрограммах?

У меня есть программа только с одной формой. Нажатием кнопки запускается преобразование 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 в основной форме, ее нельзя нажимать, как что-либо еще в основной форме.

Есть ли способ поддерживать петли внутри других 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

или должно быть указано, что этот ключ отправляется текущему запущенному процессу?

1 ответ

Решение

Решил проблему без контроля над главным окном...

просто используйте BackgroundWorker.

Другие вопросы по тегам