Асинхронные операции на WriteableBitmap

Я пишу приложение в WPF (C #), которое выполняет длинные операции над коллекцией растровых изображений. Чтобы обеспечить отзывчивость моего приложения, я решил использовать другой поток для выполнения операций с растровыми изображениями и сообщать о ходе выполнения на панели прогресса в основном потоке пользовательского интерфейса. Я думал, что BackgroundWorker сделает что-нибудь для меня, но похоже, что он выигралэто будет так просто.

У меня есть следующий код:

public class ImageProcessor
{
    public Collection Pictures { get; private set; }
    private BackgroundWorker _worker = new BackgroundWorker();

    public ImageProcessor()
    {
        _worker.DoWork += DoWork;
    }

    public void DoLotsOfOperations()
    {
        _worker.RunWorkerAsync();
    }

    private void DoWork(object sender, DoWorkEventArgs e)
    {
        // operations on Pictures collection
    }
}

Во время выполнения я загружаю изображения, используя стандартный диалог открытия файла, в коллекцию Pictures, а затем вызываю метод DoLotsOfOperations (). Но как только я пытаюсь получить доступ к любому из свойств одного растрового изображения, я получаю InvalidOperationException: "Вызывающий поток не может получить доступ к объекту, поскольку он принадлежит другому потоку ".

Это очевидно: я загрузил растровые изображения и заполнил коллекцию в потоке пользовательского интерфейса, и я пытаюсь прочитать элементы коллекции в другом потоке. Поэтому я попробовал разные подходы:

Я передал всю коллекцию как параметр метода RunWorkerAsync и вернул ее обратно в метод DoWork из e.Argument, но затем, когда я попытался прочитать свойства одного растрового изображения, я все еще получил то же исключение.Я попробовал то же самое, на этот раз передавая один растр как фоновый работникс аргументом и до сих пор не могуне получить любой из растровых изображенийсвойства, не говоря уже о растровом изображениипикселей

Так как я могу получить доступ к растровому изображению?данные внутри другого потока (и желательно с помощью BackgroundWorker)?

Я неНе знаю, может быть, весь мой подход неверен. Общая идея, которую я хочу достичь:

Пользователь загружает растровые изображения, которые затем отображаются в окне.Пользователь нажимает кнопку, и выполняется длинная операция с растровыми изображениями, но пользовательский интерфейс отзывчив (что позволяет пользователю, например, отменить операцию), а ход выполнения отображается на панели прогресса.

Заранее благодарю за любую помощь.

Ответы на вопрос(2)

Ваш ответ на вопрос