у меня есть серьезная проблема с моим Приложением 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.
Поэтому помогите. Спасибо за Ваши ответы.
Вам нужно будет использовать диспетчер пользовательского интерфейса приложения.Попробуйте использовать:
Application.Current.Dispatcher.Invoke(...)