WPF Получают Поток UI, или как показать окно от Потока неUI

у меня есть серьезная проблема с моим Приложением WPF. Я понял Библиотеку программ управления WPF для использования в качестве Дополнения в MS Office 2007.

WPF-класс инстанцирует хост и создает панель инструментов с некоторыми кнопками в MS Office. Путем нажатия кнопки wpf окно shoud появляются. Проблема состоит в том, что я alway получаю следующую ошибку: "Вызывающим потоком должен быть STA, потому что много компонентов UI требуют этого". Моя основная функция отмечена как [STAThread].

Кажется, что button_Click событие работает в другом потоке, чем поток UI.

Я пытался использовать диспетчера, но это не работало.

Dispatcher.CurrentDispatcher.Invoke(
               System.Windows.Threading.DispatcherPriority.Normal,
               new Action(
                 delegate()
                 {
    wpfform wf = new wpfform();
    wf.ShowDialog();
     ));

Я думаю, что модуль получает неправильного диспетчера, но я не знаю точно. Затем я пытался запуститься, окно в отдельной станции распараллеливают и присоединяются к потоку, но это не работало также. Когда я удалил [STAThread] Атрибут от основной функции запущенное окно, но я не мог получить доступ к офису (потому что я нахожусь в отдельном потоке).

Thread workerThread = new Thread(_ShowDialog);
workerThread.SetApartmentState(ApartmentState.STA);
workerThread.Start();
workerThread.Join();

Действительно ли возможно решить, что ui распараллеливают и создают диспетчера для этого потока, или как я могу возвратиться к потоку ui.

Поэтому помогите. Спасибо за Ваши ответы.

7
задан MarkusEm 26 May 2010 в 15:01
поделиться

1 ответ

Вам нужно будет использовать диспетчер пользовательского интерфейса приложения.Попробуйте использовать:

Application.Current.Dispatcher.Invoke(...)
9
ответ дан 7 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: