Здравствуйте, я пишу маленькое приложение 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# в целом, так что даже не уверен в чем может быть причина.