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