У меня есть программа только с одной формой. Нажав кнопку, вы начинаете преобразование ffmpeg.VB.NET: Как поддерживать управление основной формой во время циклов в других разделах?
В основной форме, в текстовом поле, выводится статистика 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
или должны быть указано, что этот ключ посылается к текущему запущенному процессу?
Вы делаете While While замыкает изменения в пользовательском интерфейсе. запустите его как фоновый рабочий – Plutonix
ok Я не настолько квалифицирован с vb.net, как перемещать только этот цикл в фоновый рабочий .. и как передавать переменные? и ... о sendkey для ffmpeg? –
Одно место для запуска: [BackgroundWorker] (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx) –