Я хочу использовать Ксабе.FFmpeg для преобразования размера видео, но я обнаружил, что, возможно, застрял в тупиковой проблеме

#wpf #ffmpeg #async-await #deadlock

Вопрос:

Теперь я использую WPF для разработки функции импорта видео. Я хочу добавить код для преобразования размера видео, но каждый раз, когда программа запускается в эту строку кода, моя программа будет заблокирована здесь.

 public MyRelayCommand<string> ImportMovieCmd => new Lazy<MyRelayCommand<string>>(() =>new MyRelayCommand<string>(ImportMovie)).Value;

private async void ImportMovie(string mediaType)
{
    string[] pathlist = ExecuteSelectFileDialog(mediaType);

    if (pathlist == null || pathlist.Length == 0)
    {
        return;
    }

    foreach (var path in pathlist)
    {
        ...

        await GetMasterMovie(newMedia);

        ...
    }
}
 

Когда я перейду к преобразованию размера видео, я застряну на этом шаге!

 private static async Task GetMasterMovie(MovieMediaInfoVM newMedia)
{
    try
    {

        ...

        var conversion = await Xabe.FFmpeg.FFmpeg.Conversions.FromSnippet.ChangeSize(moviepath, output, VideoSize.Nhd);

        conversion.OnProgress  = (sender, args) =>
        {
            var percent = (int)(Math.Round(args.Duration.TotalSeconds / args.TotalLength.TotalSeconds, 2) * 100);
            Log.Other.Info2($"[{args.Duration} / {args.TotalLength}] {percent}%");
        };

        await conversion.Start();

        ...

    }
    catch (Exception ex)
    {

        Log.Other.Info2(ex.ToString());
    }
}
 

Когда я закрываю текущее окно, программа снова начинает конвертировать видео. Теперь я изменил все методы на асинхронные, но каждый раз, когда программа достигает строки кода ниже, она зависает. Сейчас я понятия не имею. Я могу только просить о помощи!