J'utilise http://www.codeproject.com/KB/IP/Facebook_API.aspx
J'essaie d'appeler le XAML qui est créé avec WPF Mais cela me donne une erreur:
Le thread appelant doit être STA, car de nombreux composants d'interface utilisateur l'exigent.
Je ne sais pas quoi faire. J'essaie de faire ceci:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Mais cela me donne cette erreur.
J'ai ajouté un travailleur de fond:
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...
}
Essayez d’appeler votre code à partir de dispatcher :
Application.Current.Dispatcher.Invoke((Action)delegate{
// your code
});
Si vous appelez à partir du thread principal, vous devez ajouter l'attribut STAThread à la méthode Main, comme indiqué dans la réponse précédente.
Si vous utilisez un thread distinct, il doit figurer dans un STA (single-threaded apartment), ce qui n'est pas le cas pour les threads de travail en arrière-plan. Vous devez créer le fil vous-même, comme ceci:
Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);
t.Start();
avec ThreadProc étant un délégué de type ThreadStart.
Je suspecte que vous obteniez un rappel sur un composant d'interface utilisateur à partir d'un thread en arrière-plan. Je vous recommande de passer cet appel en utilisant un BackgroundWorker, car il s'agit d'un thread compatible avec l'interface utilisateur.
Pour BackgroundWorker, le programme principal doit être marqué comme [STAThread].
Vous pouvez aussi essayer ceci
// 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();
Marquez simplement votre programme avec l'attribut [STAThread]
et l'erreur disparaîtra! c'est magique :)
Pour moi, cette erreur est due à la transmission d'un paramètre null. Vérifier les valeurs des variables corrigeait mon problème sans avoir à changer le code. J'ai utilisé BackgroundWorker.