Я использую диалог поиска файлов, чтобы позволить пользователю выбрать несколько изображений.Если выбрано много изображений, как ожидается, это займет немного времени.Ниже приведен пример того, что я делаю с выбранными изображениями.Я перебираю пути к изображениям и создаю экземпляр пользовательского элемента управления, пользовательский элемент управления имеет элемент управления изображением и несколько других элементов управления.Я создаю экземпляр этого элемента управления, а затем добавляю его в существующую stackPanel, созданную в xaml-файле связанного окна.Пример ниже работает отлично, но я пытаюсь лучше понять BackGroundWorker, я получаю основы того, как его настроить, с его событиями, и возвращаю значение, которое может обновить индикатор выполнения, но потому, что мой цикл требуетВремя вверх, указанное ниже, добавляет экземпляр usercontrol к существующей панели стека. Он не будет работать, находясь в другом потоке.Является ли BackGroundWorker чем-то, что работает для такого примера?Если так, то каков наилучший способ обновить пользовательский интерфейс (мою стековую панель), который находится вне потока?Я довольно новичок в wpf и никогда не использовал BackGroundWorker, кроме тестирования того, чтобы он просто обновлял прогресс со значением int, поэтому я надеюсь, что этот вопрос имеет смысл, если я далеко от цели, просто дайте мне знать.Спасибо за любые мысли.
Пример того, как я делаю это сейчас, который работает нормально.
protected void myMethod(string[] fileNames) {
MyUserControl uc;
foreach (String imagePath in fileNames) {
uc = new MyUserControl();
uc.setImage(imagePath);
stackPanel.Children.Add(uc);
progressBar.Value = ++counter;
progressBar.Refresh();
}
}
ниже этого класса у меня есть это, так что я могу иметь обновление progressBar:
public static class extensionRefresh {
private static Action EmptyDelegate = delegate() { };
public static void Refresh(this UIElement uiElement) {
uiElement.Dispatcher.Invoke(DispatcherPriority.Background, EmptyDelegate);
}
}