프로그램이 하나뿐입니다. 버튼을 누르면 ffmpeg 변환이 시작됩니다.VB.NET : 다른 하위의 루프 중 기본 폼 컨트롤을 유지하는 방법?
기본 서식의 텍스트 상자에서 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을 멈추거나 일시 정지하기위한 버튼을 만들고 싶다면 메인 폼에서 아무것도 눌러 낼 수 없습니다.
실행 중 메인 폼의 느슨한 제어없이 다른 서브 내에서 루프를 유지하는 방법이 있습니까?
텍스트 상자와 진행률 막대가있는 다른 대화 상자 양식을 호출하여 문제를 해결하려고했습니다. 그러나이 양식조차도 프로세스가 끝날 때까지 완전히 제어 할 수 없습니다.
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
또는이 키가 현재 실행중인 프로세스에 전송되는 것을 지정해야합니다
는 올바른 사용 (즉 윈도우없이 실행)는 FFmpeg하는 변환을 중지/일시 정지를 보내려면?
당신은 루프가 UI 변경 사항을 잠그고 있습니다. 그것을 배경 작업자로 실행하십시오 – Plutonix
좋습니다. vb.net에 익숙하지 않습니다.이 루프 만 백그라운드 작업자로 이동하는 방법과 변수 전달 방법은 무엇입니까? 그리고 ... ffmpeg에 대한 sendkey에 대해서? –
한 곳에서 시작하십시오 : [BackgroundWorker] (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx) –