#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());
}
}
Когда я закрываю текущее окно, программа снова начинает конвертировать видео. Теперь я изменил все методы на асинхронные, но каждый раз, когда программа достигает строки кода ниже, она зависает. Сейчас я понятия не имею. Я могу только просить о помощи!