WPF с Windows Forms - STAThread - PullRequest
       23

WPF с Windows Forms - STAThread

5 голосов
/ 19 октября 2008

Я новичок в WPF и у меня есть пара вопросов об интеграции WPF и Windows Forms.

У меня есть приложение для Windows C # для Visual C #. Я хотел бы интегрировать его с окном WPF, которое можно отобразить по нажатию кнопки. Это было невозможно, так как WPF ожидает, что вызывающий поток является STAThread, а по умолчанию WinForm предполагает, что поток является MTAThread. Я попытался создать новый поток с состоянием STAThread для вызова пользовательского интерфейса WPF, но это не сработало. Я попытался использовать метод Dispatcher.BeginInvoke и Background Worker, но ни один из них не решил проблему.

1) Можем ли мы вызвать окно / элемент управления WPF, не пометив Main как STAThread? Если это возможно, может кто-нибудь указать мне правильное направление? 2) Если единственный способ сделать это - сделать основной поток STAThread, это повлияет на общую производительность / отзывчивость приложения.

Заранее спасибо.

1 Ответ

8 голосов
/ 19 октября 2008

Я думаю, что самое простое решение - заставить ваш поток WinForms выполняться в STA. Нет ничего плохого в том, чтобы иметь приложение winforms потока STA (на самом деле оно часто используется по умолчанию).

Вы можете исправить это, добавив следующую строку в основной метод вашей программы:

[STAThreadAttribute]
static void Main(string[] args)
...