Estou usando http://www.codeproject.com/KB/IP/Facebook_API.aspx
Estou tentando chamar o XAML que é criado usando o WPF . Mas isso me dá um erro:
O segmento de chamada deve ser STA, porque muitos componentes da interface do usuário exigem isso.
Não sei o que fazer Estou tentando fazer isso:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Mas está me dando esse erro.
Eu adicionei um trabalhador em segundo plano:
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
C ..
fonte
fonte
DispatcherHelper.CheckBeginInvokeOnUI(Action action)
Se você fizer a chamada a partir do encadeamento principal, deverá adicionar o atributo STAThread ao método Main, conforme indicado na resposta anterior.
Se você usar um encadeamento separado, ele precisará estar em um STA (apartamento de encadeamento único), o que não é o caso dos encadeamentos de trabalho em segundo plano. Você mesmo deve criar o thread, assim:
com ThreadProc sendo um delegado do tipo ThreadStart.
fonte
Você também pode tentar isso
fonte
Eu suspeito que você esteja recebendo um retorno de chamada para um componente de interface do usuário a partir de um thread em segundo plano. Eu recomendo que você faça essa chamada usando um BackgroundWorker, pois isso reconhece o thread da interface do usuário.
Para o BackgroundWorker, o programa principal deve ser marcado como [STAThread].
fonte
Basta marcar o seu programa com o
[STAThread]
atributo e o erro desaparece! é Magica :)fonte
Para mim, esse erro ocorreu devido à passagem de um parâmetro nulo. A verificação dos valores das variáveis corrigiu meu problema sem precisar alterar o código. Eu usei o BackgroundWorker.
fonte
Se você chamar uma nova instrução de interface do usuário da janela em um encadeamento existente, ele emitirá um erro. Em vez disso, crie um novo thread dentro do thread principal e escreva a instrução da interface do usuário da janela no novo thread filho.
fonte