Używam http://www.codeproject.com/KB/IP/Facebook_API.aspx
Próbuję wywołać XAML, który jest tworzony przy użyciu WPF . Ale daje mi błąd:
Wątkiem wywołującym musi być STA, ponieważ wymaga tego wiele składników interfejsu użytkownika.
Nie wiem co mam robić. Próbuję to zrobić:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Ale to daje mi ten błąd.
Dodałem pracownika w tle:
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...
}
wpf
xaml
multithreading
facebook
DO..
źródło
źródło
DispatcherHelper.CheckBeginInvokeOnUI(Action action)
Jeśli wykonujesz wywołanie z głównego wątku, musisz dodać atrybut STAThread do metody Main, jak stwierdzono w poprzedniej odpowiedzi.
Jeśli używasz oddzielnego wątku, musi on znajdować się w STA (mieszkaniu jednowątkowym), co nie ma miejsca w przypadku wątków roboczych w tle. Musisz sam stworzyć wątek, w ten sposób:
z ThreadProc będącym delegatem typu ThreadStart.
źródło
Możesz także spróbować tego
źródło
Podejrzewam, że otrzymujesz wywołanie zwrotne do składnika interfejsu użytkownika z wątku w tle. Zalecam wykonanie tego wywołania przy użyciu BackgroundWorker, ponieważ jest to świadomy wątek interfejsu użytkownika.
W przypadku BackgroundWorker główny program powinien być oznaczony jako [STAThread].
źródło
Po prostu oznacz swój program
[STAThread]
atrybutem, a błąd zniknie! to magia :)źródło
U mnie ten błąd wystąpił z powodu przekazania parametru o wartości null. Sprawdzanie wartości zmiennych rozwiązało mój problem bez konieczności zmiany kodu. Użyłem BackgroundWorker.
źródło
Jeśli wywołasz instrukcję interfejsu użytkownika nowego okna w istniejącym wątku, zgłosi błąd. Zamiast tego utwórz nowy wątek w głównym wątku i napisz instrukcję interfejsu użytkownika okna w nowym wątku podrzędnym.
źródło