Я использую http://www.codeproject.com/KB/IP/Facebook_API.aspx
Я пытаюсь вызвать XAML, созданный с использованием WPF . Но это дает мне ошибку:
Вызывающий поток должен быть STA, потому что это требуется для многих компонентов пользовательского интерфейса.
Я не знаю что делать Я пытаюсь сделать это:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Но это дает мне эту ошибку.
Я добавил фоновый рабочий:
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)
Если вы делаете вызов из основного потока, вы должны добавить атрибут STAThread в метод Main, как указано в предыдущем ответе.
Если вы используете отдельный поток, он должен находиться в STA (однопотоковой квартире), что не относится к фоновым рабочим потокам. Вы должны создать тему самостоятельно, например так:
с ThreadProc, являющимся делегатом типа ThreadStart.
источник
Вы также можете попробовать это
источник
Я подозреваю, что вы получаете обратный вызов для компонента пользовательского интерфейса из фонового потока. Я рекомендую вам сделать этот вызов, используя BackgroundWorker, так как он поддерживает потоки пользовательского интерфейса.
Для BackgroundWorker основная программа должна быть помечена как [STAThread].
источник
Просто пометьте вашу программу
[STAThread]
атрибутом, и ошибка исчезнет! это магия :)источник
Для меня эта ошибка произошла из-за передачи нулевого параметра. Проверка значений переменных устранила мою проблему без необходимости изменения кода. Я использовал BackgroundWorker.
источник
Если вы вызовете оператор нового пользовательского интерфейса окна в существующем потоке, он выдаст ошибку. Вместо этого создайте новый поток внутри основного потока и запишите оператор окна UI в новом дочернем потоке.
источник