我用的是http://www.codeproject.com/KB/IP/Facebook_API.aspx
我正在尝试调用使用WPF创建的XAML。但是它给了我一个错误:
调用线程必须是STA,因为许多UI组件都要求这一点。
我不知道该怎么办。我正在尝试这样做:
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...
}
另一种情况,如果你可能遇到,选择窗口新建和显示。
不要在App.xaml.cs的App()或OnStartup()中做出选择,而是在Startup事件中做出选择。
// App.xaml.cs
private App()
{
Window window = CheckSession() ? new InstallWindow() : (Window)new LoginWindow();
window.Show(); // bad 1
}
protected override void OnStartup(StartupEventArgs e)
{
Window window = CheckSession() ? new InstallWindow() : (Window)new LoginWindow();
window.Show(); // bad 2
base.OnStartup(e);
}
下面应该不错
// App.xaml.cs
private App()
{
Startup += Application_Startup;
}
private void Application_Startup(object sender, StartupEventArgs e)
{
Window window = CheckSession() ? new InstallWindow() : (Window)new LoginWindow();
window.Show(); // good
}
还记得从App.xaml中删除StartupUri
<!--App.xaml-->
<Application StartupUri="MainWindow">
<!--remove StartupUri-->
</Application>
或者在这里添加事件也可以。
<!--App.xaml-->
<Application Startup="Application_Startup">
</Application>
// App.xaml.cs
private App()
{
}
private void Application_Startup(object sender, StartupEventArgs e)
{
Window window = CheckSession() ? new InstallWindow() : (Window)new LoginWindow();
window.Show(); // good
}