У меня есть несколько сложное приложение WPF, которое, кажется, "висит" или застревает в вызове "Ожидание" при попытке использовать диспетчера для вызова вызова в потоке пользовательского интерфейса.
Общий процесс:
- Обработать событие click нажатием кнопки
- Создайте новый поток (STA), который: создает новый экземпляр ведущего и пользовательского интерфейса, затем вызывает метод Отключить
- Отключить затем устанавливает свойство в пользовательском интерфейсе Имя
- Затем установщик для имени использует следующий код для установки свойства:
if(this.Dispatcher.Thread != Thread.CurrentThread)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
this.Name = value; // Call same setter, but on the UI thread
});
return;
}
SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.
Моя проблема заключается в том, что при вызове метода диспетчера invoke он, кажется, висит каждый раз, а callstack указывает, что он находится во сне, ждет или присоединяется к реализации Invoke.
Итак, есть ли что-то, что я делаю неправильно, я отсутствую, очевидно или нет, или есть лучший способ обратиться к потоку пользовательского интерфейса, чтобы установить это свойство (и другие)?
Изменить:. Решение заключалось в вызове System.Windows.Threading.Dispatcher.Run() в конце делегата потока (например, когда работа выполнялась) - Спасибо всем, кто помог.