2008-10-19 17 views
5

WPF'ye yeni başlayan bir kişiyim ve WPF ve Windows Forms entegrasyonu hakkında birkaç sorum var.WPF, Windows Forms ile - STAThread

Varolan bir Visual C# Windows Forms uygulamasına sahibim. Bir butona tıklayarak gösterilebilecek bir WPF penceresi ile entegre etmek istiyorum. WPF, arama iş parçacığının bir STAThread olmasını beklediği için bu mümkün olmadı ve varsayılan olarak WinForm, iş parçacığının bir MTAThread olduğunu varsayar. WPF UI'yi çağırdığı için STAThread apartman dairesiyle yeni bir iş parçacığı oluşturmaya çalıştım ama işe yaramadı. Dispatcher.BeginInvoke yöntemini ve Arka Plan Çalışanı'nı kullanmayı denedim, ancak bunların hiçbiri sorunu çözmedi.

1) WPF penceresine/kontrolüne Main'u bir STAThread olarak işaretlemeden arayabilir miyiz? Mümkünse, lütfen beni uygun bir yöne yönlendirebilir mi? 2) Bunu gerçekleştirmenin tek yolu, Ana İpliği bir STATHread yaparak, uygulamanın genel performansına/yanıt vermesine herhangi bir etkisi olacaktır.

Şimdiden teşekkürler.

cevap

8

En basit çözüm, WinForms iş parçacığının bir STA'da çalıştırılmasını sağlamaktır. Bir STA iş parçacığı winforms uygulamasına sahip olmanın yanlış bir tarafı yoktur (aslında bu genellikle varsayılan).

Sen programın ana yöntemine aşağıdaki satırı ekleyerek bu sorunu giderebilirsiniz: STA OLE sürükle-bırak ve işe arabirim belirli COM bileşeni için gerekli olan Nitekim

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

.. – Gishu

İlgili konular