пытаюсь запустить асинхронный метод конвертации, использую FFMpeg.Но при активации кнопки появляется ошибка "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток."
Пробовал способы из интернета, но ничего не помогает. Я только новичок, если вопрос очень лёгкий, прошу прощения.
public async void startConvert()
{
if (SaveValues.multiImportMode)
{
}
else
{
Process process1 = new Process();
process1.StartInfo.WorkingDirectory = @"C:\ffmpeg-5.1-full_build\bin";
process1.StartInfo.FileName = "ffmpeg";
process1.StartInfo.Arguments = "-i \"" + videoPathTextBox.Text + "\" -qscale 0 \"" + SaveValues.finalVideoPath + "\\ConvertedVideo" + CheckNameFinalVideo() + SaveValues.finalFormatVideo + "\"";
process1.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process1.Start();
Random ran = new Random();
progressBar.Value = ran.Next(10, 75);
while (true)
{
if (process1.HasExited)
{
progressBar.Value = 100;
status.Text = "Done";
await Task.Delay(3000);
status.Text = "";
progressBar.Value = 0;
}
}
}
}
private async void applyButton_Click(object sender, RoutedEventArgs e)
{
try
{
await Task.Run(() => startConvert());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка!");
}
}
Решение с отображением прогресса выполнения. Вы не должны в коде вообще использовать контролы, у вас должны быть свойства, к котором привязаны контролы, а метод наружу должен отдавать прогресс, который вы реализуете и через него меняете значение привязанных свойство. Сейчас вы просто дергаете вечно контролы по именам (progressBar.Valueиstatus.Text). – EvgeniyZ Aug 15 '22 at 15:38