Вызывающий stream должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого

Я использую http://www.codeproject.com/KB/IP/Facebook_API.aspx

Я пытаюсь вызвать XAML, который создается с помощью WPF . Но это дает мне ошибку:

Вызывающий stream должен быть 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... } 

Попробуйте вызвать код у диспетчера :

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

Если вы делаете вызов из основного streamа, вы должны добавить атрибут STAThread к методу Main, как указано в предыдущем ответе.

Если вы используете отдельный stream, он должен быть в STA (однопоточной квартире), что не относится к streamам рабочего streamа. Вы должны сами создать stream, например:

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

с ThreadProc является делегатом типа ThreadStart.

Я подозреваю, что вы получаете обратный вызов для компонента пользовательского интерфейса из фонового streamа. Я рекомендую вам сделать этот вызов с помощью BackgroundWorker, поскольку это stream сообщений в пользовательском интерфейсе.

Для BackgroundWorker основная программа должна быть отмечена как [STAThread].

Вы также можете попробовать это

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

Application.Current.Dispatcher.Invoke ((Action) delegate {// помещаем здесь код});

Для меня эта ошибка возникла из-за передачи пустого параметра. Проверка значений переменных исправила мою проблему без изменения кода. Я использовал BackgroundWorker.

Если вы вызываете новый оператор UI windows в существующем streamе, он выдает ошибку. Вместо этого создайте новый stream внутри основного streamа и запишите оператор windows UI в новый дочерний stream.

  • Лучший способ использовать векторное изображение в WPF?
  • Являются ли "{Binding Path =.}" И "{Binding}" действительно равными
  • Как установить событие MouseOver / триггер для границы в XAML?
  • Имя не существует в ошибке пространства имен в XAML
  • Ширина столбца DataGrid не обновляется автоматически
  • WPF MVVM Зачем использовать ContentControl + DataTemplate Views, а не прямые XAML Window Views?
  • Этот тип CollectionView не поддерживает изменения в SourceCollection из streamа, отличного от streamа Dispatcher
  • Как применить правило пользовательской сортировки к WPF DataGrid?
  • Windows 10 ScrollIntoView () не прокручивает элементы в середине списка
  • Привязка отображает состояние в режиме просмотра MVVM?
  • Как заставить WPF использовать URI ресурсов, которые используют сильное имя сборки? Argh!
  • Interesting Posts

    Могу ли я снова запустить свою программу Microsoft Office 2010 Starter после истечения срока действия пробной версии Office?

    Запустить скрипт при выходе из системы / выключения ubuntu

    Использование опций Java 8 с Stream :: flatMap

    Когда я должен использовать отношения один к одному?

    Какой лучший способ сортировать по 5-звездочному рейтингу?

    Rails CSRF Protection + Angular.js: protect_from_forgery заставляет меня выйти на POST

    Импортируйте CSV-файл в Sqlite на Android

    Angularjs, проходящий между маршрутами

    Как я могу получить доступ к учетным записям в Windows (созданный с помощью Bash-on-Ubuntu-on-Windows)?

    Почему я неожиданно получаю сообщение «Заблокированная загрузка смешанного активного контента» в Firefox?

    Тип контента ‘application / x-www-form-urlencoded; charset = UTF-8’ не поддерживается для @RequestBody MultiValueMap

    Почему вектор :: ссылка не возвращает ссылку на bool?

    eclipse с Android sdk, ERROR: пространство кучи Java

    Ошибка Java: неявный супер-конструктор не определен для конструктора по умолчанию

    Установка OpenCV в CentOS

    Давайте будем гением компьютера.