Как правильно передать объект WriteableBitmap из одного потока в другой (BackgroundWorker)?

Здравствуйте, я пишу маленькое приложение WPF, которое кое-как обрабатывает изображение, а затем отображает его в элементе MainImage. Делает оно это долго, поэтому я решил запихнуть весь код обработки в отдельную функцию и использовать BackgroundWorker (для удобного отображения прогресса).
Упрощенно все выглядит так:

Этот код выполняется после получения пути к изображению:
private void SelectImage ()
        {
            BackgroundWorker worker = new BackgroundWorker();
            worker.WorkerReportsProgress = true;
            worker.DoWork += worker_DoWork;
            worker.ProgressChanged += worker_ProgressChanged;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.RunWorkerAsync(path); // path - строка (путь к изображению)
        }


Функция обработки изображения:
private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            writableBitmap = new WriteableBitmap(new BitmapImage(new Uri((string)e.Argument))));
            //  Код обработки изображения ...
            e.Result = writeableBitmap.Clone();
        }


Код после выполнения обработки:
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MainImage.Source = (WriteableBitmap)e.Result;
        }


Программа срабатывает без исключений, но изображение в конце концов не отображается, хотя при выполнении кода в основном потоке все работает нормально. Я только недавно начал изучать WPF и C# в целом, так что даже не уверен в чем может быть причина.
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы