it-swarm.com.de

Der aufrufende Thread muss STA sein, da viele UI-Komponenten dies erfordern

Ich verwende http://www.codeproject.com/KB/IP/Facebook_API.aspx

Ich versuche, das XAML aufzurufen, das mit WPF erstellt wird. Aber es gibt einen Fehler:

Der aufrufende Thread muss STA sein, da viele UI-Komponenten dies erfordern.

Ich weiß nicht was ich tun soll. Ich versuche das zu tun:

FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();

Aber es gibt mir diesen Fehler.

Ich habe einen Hintergrundarbeiter hinzugefügt:

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...
}
137
C..

Versuchen Sie, Ihren Code vom dispatcher aufzurufen:

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

Wenn Sie den Aufruf vom Haupt-Thread aus durchführen, müssen Sie das STAThread-Attribut der Main-Methode hinzufügen, wie in der vorherigen Antwort angegeben.

Wenn Sie einen separaten Thread verwenden, muss es sich in einer STA (Single Threaded Apartment) befinden, was bei Hintergrund-Worker-Threads nicht der Fall ist. Sie müssen den Thread selbst so erstellen:

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

t.Start();

wobei ThreadProc ein Delegat des Typs ThreadStart ist.

129
Timores

Ich vermute, dass Sie von einem Hintergrund-Thread einen Rückruf auf eine UI-Komponente erhalten. Ich empfehle, dass Sie diesen Aufruf mit einem BackgroundWorker durchführen, da dies dem UI-Thread bewusst ist.

Für den BackgroundWorker sollte das Hauptprogramm als [STAThread] gekennzeichnet sein.

15
Preet Sangha

Sie können dies auch versuchen

// 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();  
11
atik sarker

Markieren Sie Ihr Programm einfach mit dem [STAThread]-Attribut und der Fehler verschwindet! es ist Magie :)

1
liron

Für mich trat dieser Fehler auf, weil ein Nullparameter übergeben wurde. Die Überprüfung der Variablenwerte hat mein Problem behoben, ohne den Code ändern zu müssen. Ich habe BackgroundWorker verwendet.

0
Ryan Loggerythm