0

пытаюсь запустить асинхронный метод конвертации, использую 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, "Ошибка!");
    }

}

Katrg
  • 1
  • https://ru.stackoverflow.com/a/418463/220553 – EvgeniyZ Aug 15 '22 at 15:32
  • @EvgeniyZ я же вроде функцию так и запускаю, но всё равно ошибку выдаёт – Katrg Aug 15 '22 at 15:35
  • Внимательней читайте, а не сразу комментируйте. Особенно внимание на Решение с отображением прогресса выполнения. Вы не должны в коде вообще использовать контролы, у вас должны быть свойства, к котором привязаны контролы, а метод наружу должен отдавать прогресс, который вы реализуете и через него меняете значение привязанных свойство. Сейчас вы просто дергаете вечно контролы по именам (progressBar.Value и status.Text). – EvgeniyZ Aug 15 '22 at 15:38
  • 1
    @EvgeniyZ Извините, поторопился. Спасибо большое, всё заработало. – Katrg Aug 15 '22 at 16:01

0 Answers0