Я создал метод для вызова двоичных файлов ffmpeg и для этого делал вещи. Он работал отлично на стандартном консольном приложении. Я пытаюсь сделать версию приложения Windows Form, но проблем мало. Приложение зависает (но индикатор выполнения все еще обновляется), когда процесс ffmpeg все еще работает. Текстовые поля не обновляются. Я не могу переместить окно приложения. Я подозреваю, что это из-за цикла, и я искал некоторые вещи и выяснил, что мне может понадобиться сделать это асинхронно, но как это сделать.C# - Как асинхронно передавать поток из ffmpeg
public void ffmpeg(string ffmpeg_exe, string args)
{
Process p = new Process();
p.StartInfo.FileName = ffmpeg_exe;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.Arguments = args;
p.StartInfo.UseShellExecute = false;
p.Start();
StreamReader reader = p.StandardError;
string line;
string size = "", current_duration = "", duration = "";
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
if (line.Contains("Duration") && line.Contains("bitrate") && line.Contains("start"))
{
duration = RemoveWhitespace(Between(line, "Duration:", ", start"));
totaltime.Text = duration;
}
if (line.Contains("frame=") && line.Contains("size=") && line.Contains("time="))
{
size = RemoveWhitespace(Between(line, "size=", " time"));
current_duration = RemoveWhitespace(Between(line, "time=", " bitrate"));
progressBar_main.Value = Convert.ToInt32(Math.Round(TimeSpan.Parse(current_duration.Substring(0, current_duration.Length -3)).TotalSeconds * 100/TimeSpan.Parse(duration.Substring(0,duration.Length-3)).TotalSeconds, 3));
current_time.Text = current_duration;
filesize.Text = size;
}
}
}
p.Close();
current_time.Text = "";
filesize.Text = "";
totaltime.Text = "";
progressBar_main.Value = 0;
}
Теперь я могу создать задачу и запустить ее. Он работал правильно, но основное событие (нажатие кнопки) не будет ждать завершения. –
Это не будет ждать, потому что задача выполняется асинхронно, вы можете создать событие, которое будет поднято при завершении задачи. –
О, ладно. Понял. –