J'utilise http://www.codeproject.com/KB/IP/Facebook_API.aspx
J'essaie d'appeler le XAML qui est créé à l'aide de 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'essaye de faire ceci:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Mais cela me donne cette erreur.
J'ai ajouté un travailleur d'arrière-plan:
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...
}
DispatcherHelper.CheckBeginInvokeOnUI(Action action)
Si vous effectuez l'appel à 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 séparé, il doit se trouver dans un STA (cloisonnement monothread), 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:
avec ThreadProc étant un délégué de type ThreadStart.
la source
Vous pouvez également essayer ceci
la source
Je soupçonne que vous recevez un rappel vers un composant d'interface utilisateur à partir d'un thread d'arrière-plan. Je vous recommande de passer cet appel à l'aide d'un BackgroundWorker car il est compatible avec les threads d'interface utilisateur.
Pour BackgroundWorker, le programme principal doit être marqué comme [STAThread].
la source
Marquez simplement votre programme avec l'
[STAThread]
attribut et l'erreur disparaît! c'est magique :)la source
Pour moi, cette erreur s'est produite en raison de la transmission d'un paramètre nul. La vérification des valeurs des variables a résolu mon problème sans avoir à changer le code. J'ai utilisé BackgroundWorker.
la source
Si vous appelez une nouvelle instruction d'interface utilisateur de fenêtre dans un thread existant, cela génère une erreur. Au lieu de cela, créez un nouveau thread à l'intérieur du thread principal et écrivez l'instruction de l'interface utilisateur de la fenêtre dans le nouveau thread enfant.
la source