Я новичок в WPF, и у меня есть несколько вопросов об интеграции WPF и Windows Forms.
У меня есть приложение Visual C# Windows Forms. Я хотел бы интегрировать его с окном 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)
Фактически, STA необходима для работы OLE drag-drop и взаимодействия с некоторыми COM-компонентами.