WPF с Windows Forms - STAThread
Вопрос
Я новичок в WPF и у меня есть пара вопросов об интеграции WPF и Windows Forms.
У меня есть существующее приложение Windows Cms для Visual C #. Я хотел бы интегрировать его с окном WPF, которое можно отобразить по нажатию кнопки. Это было невозможно, так как WPF ожидает, что вызывающий поток является STAThread, а по умолчанию WinForm предполагает, что поток является MTAThread. Я попытался создать новый поток с состоянием STAThread для вызова пользовательского интерфейса WPF, но это не сработало. Я попытался использовать метод Dispatcher.BeginInvoke и Background Worker, но ни один из них не решил проблему.
1) Можем ли мы сделать вызов окна / элемента управления WPF, не пометив Main как STAThread? Если это возможно, может кто-нибудь указать мне правильное направление? 2) Если единственный способ сделать это - сделать основной поток STAThread, это повлияет на общую производительность / быстродействие приложения.
Заранее спасибо.
Решение
Я думаю, что самое простое решение - заставить ваш поток WinForms выполняться в STA. Нет ничего плохого в том, чтобы иметь приложение winforms потока STA (на самом деле оно часто используется по умолчанию). Р>
Это можно исправить, добавив следующую строку в основной метод вашей программы:
[STAThreadAttribute]
static void Main(string[] args)