2008-10-19 5 views
5

저는 WPF의 초보자이며 WPF 및 Windows Forms 통합에 대한 몇 가지 질문이 있습니다.WPF with Windows Forms - STAThread

기존 Visual C# Windows Forms 응용 프로그램이 있습니다. 단추 클릭으로 표시 할 수있는 WPF 창과 통합하고 싶습니다. WPF에서 호출 스레드가 STAThread가 될 것으로 기대하고 기본적으로 WinForm은 스레드가 MTAThread라고 가정하므로이 작업은 불가능합니다. 내가 WPF UI를 호출에 대한 STAThread의 아파트 상태와 새 스레드를 산란했는데 작동하지 않았다. Dispatcher.BeginInvoke 메서드와 Background Worker를 사용해 보았지만 아무도 문제를 해결하지 못했습니다.

1) Main을 STAThread로 표시하지 않고 WPF 창/컨트롤을 호출 할 수 있습니까? 그것이 가능하다면, 누군가 적절한 방향으로 가르쳐 주시겠습니까? 2) 메인 스레드를 STAThread로 만드는 유일한 방법은 응용 프로그램의 일반적인 성능/응답성에 영향을 미칩니다.

미리 감사드립니다.

답변

8

가장 간단한 해결책은 WinForms 스레드를 STA에서 실행하는 것입니다. STA 스레드 winforms 앱을 사용하는 데는 아무런 문제가 없습니다 (사실은 종종 기본값입니다).

당신은 당신의 프로그램의 main 메소드에 다음 줄을 추가하여이 문제를 해결할 수 있습니다 : STA가 OLE 끌어서 놓기 및 작업 인터페이스 특정 COM 구성 요소에 필요한 사실

[STAThreadAttribute] 
static void Main(string[] args) 
+1

.. – Gishu