我正在使用http://www.codeproject.com/KB/IP/Facebook_API.aspx
调用线程必须是STA,因为许多UI组件都需要这个.
我不知道该怎么办.我想这样做:
FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误.
我添加了一个后台工作者:
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...
}
Run Code Online (Sandbox Code Playgroud) 我的情景:
void Installer1_AfterInstall(object sender, InstallEventArgs e)
{
try
{
MainWindow ObjMain = new MainWindow();
ObjMain.Show();
}
catch (Exception ex)
{
Log.Write(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误"调用线程必须是STA,因为许多UI组件需要这个"
我所做的?
我已经在这个简单的WPF应用程序中实现了Stack Overflow问题实现进度条的解决方案.
MainWindow有自己的viewmodel.在该viewmodel中,我收到用户的输入并使用后台工作程序使用WCF服务.在WCF提供数据后,我正在尝试在新窗口中显示它.这是发生错误的地方:
调用线程必须是STA,因为许多UI组件都需要这个.
我试图将该[STAThread]
属性放在MainWindow 代码隐藏以及MainWindowViewModel构造函数内部.两种情况都没有改变.
我错过了什么?
更新 用户在viewmodel中单击命令后调用LoadData方法
private void LoadData(string searchBy)
{
IsBusy = true;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
switch (searchBy)
{
// WCF call to load data
}
}
worker.RunWorkerCompleted += (o, ea) =>
{
IsBusy = false;
};
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)