Вопрос

Я новичок в 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top