2008-10-19 19 views
5

Soy un novato en WPF y tengo un par de preguntas sobre WPF y la integración de Windows Forms.WPF con Windows Forms - STAThread

Tengo una aplicación existente de Visual C# Windows Forms. Me gustaría integrarlo con una ventana de WPF, que se puede mostrar con un clic de botón. Esto no fue posible ya que WPF espera que el hilo de llamada sea un STAThread y, de forma predeterminada, WinForm supone que el hilo es un MTAThread. Intenté engendrar un nuevo hilo con un estado de apartamento de STAThread para llamar a la interfaz de usuario de WPF pero eso no funcionó. Traté de usar el método Dispatcher.BeginInvoke y Background Worker también, pero ninguno de ellos resolvió el problema.

1) ¿Podemos hacer una llamada a la ventana/control de WPF sin marcar Main como STAThread? Si es posible, ¿alguien puede indicarme una dirección correcta? 2) Si la única forma de lograr esto es hacer que el hilo principal sea un STAThread, ¿habrá algún impacto en el rendimiento/capacidad de respuesta general de la aplicación?

Gracias de antemano.

Respuesta

8

Creo que la solución más simple es hacer que su subproceso de WinForms se ejecute en una STA. No hay nada de malo en tener una aplicación STA de winforms (de hecho, a menudo es la predeterminada).

Puede solucionar este problema mediante la adición de la línea siguiente al método principal de su programa:

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

De hecho se necesita STA para OLE arrastrar y soltar y cierta componente COM interfaz para trabajar .. – Gishu