El hilo de llamada debe ser STA, porque muchos componentes de UI requieren esto

Estoy usando http://www.codeproject.com/KB/IP/Facebook_API.aspx

Intento llamar al XAML que se crea usando WPF . Pero me da un error:

El hilo que llama debe ser STA, porque muchos componentes de UI lo requieren.

No se que hacer. Estoy tratando de hacer esto:

FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList(); 

Pero me está dando ese error.

Agregué un trabajador de fondo:

 static BackgroundWorker bw = new BackgroundWorker(); static void Main(string[] args) { bw.DoWork += bw_DoWork; bw.RunWorkerAsync("Message to worker"); Console.ReadLine(); } static void bw_DoWork(object sender, DoWorkEventArgs e) { // This is called on the worker thread FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList(); Console.WriteLine(e.Argument); // Writes "Message to worker" // Perform time-consuming task... } 

Intente invocar su código desde el despachador :

 Application.Current.Dispatcher.Invoke((Action)delegate{ // your code }); 

Si realiza la llamada desde el hilo principal, debe agregar el atributo STAThread al método Principal, como se indicó en la respuesta anterior.

Si utiliza un hilo separado, debe estar en un STA (apartamento de subproceso único), que no es el caso para los subprocesos de trabajo en segundo plano. Tienes que crear el hilo tú mismo, así:

 Thread t = new Thread(ThreadProc); t.SetApartmentState(ApartmentState.STA); t.Start(); 

con ThreadProc siendo un delegado de tipo ThreadStart.

Sospecho que recibes una callback a un componente de UI desde un hilo de fondo. Te recomiendo que hagas esa llamada usando un BackgroundWorker ya que este es un thread thread.

Para el BackgroundWorker, el progtwig principal debe marcarse como [STATread].

también puedes probar esto

 // create a thread Thread newWindowThread = new Thread(new ThreadStart(() => { // create and show the window FaxImageLoad obj = new FaxImageLoad(destination); obj.Show(); // start the Dispatcher processing System.Windows.Threading.Dispatcher.Run(); })); // set the apartment state newWindowThread.SetApartmentState(ApartmentState.STA); // make the thread a background thread newWindowThread.IsBackground = true; // start the thread newWindowThread.Start(); 

Application.Current.Dispatcher.Invoke ((Acción) delegate {// poner código aquí});

Para mí, este error se produjo debido a un parámetro nulo que se pasa. Verificar los valores de las variables solucionó mi problema sin tener que cambiar el código. Usé BackgroundWorker.

Si llama a una nueva statement de UI de ventana en una secuencia existente, arroja un error. En lugar de eso, cree un nuevo subproceso dentro del subproceso principal y escriba la instrucción de UI de ventana en el nuevo subproceso secundario.