2015-02-01 4 views
1

프로그램이 하나뿐입니다. 버튼을 누르면 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하는 변환을 중지/일시 정지를 보내려면?

+0

당신은 루프가 UI 변경 사항을 잠그고 있습니다. 그것을 배경 작업자로 실행하십시오 – Plutonix

+0

좋습니다. vb.net에 익숙하지 않습니다.이 루프 만 백그라운드 작업자로 이동하는 방법과 변수 전달 방법은 무엇입니까? 그리고 ... ffmpeg에 대한 sendkey에 대해서? –

+1

한 곳에서 시작하십시오 : [BackgroundWorker] (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx) –

답변

1

메인 창에서 제어 할 수없는 문제가 해결되었습니다 ...

그냥 BackgroundWorker를 사용하십시오.