refs:
http://blog.csdn.net/leftfist/article/details/41747255?utm_source=tuicool
WPF中,代码中准备控制控件内容时,有时会报错:
调用线程必须为 STA,因为许多 UI 组件都需要
我知道,在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理。难道在WPF中,也一样吗?
首先,WPF中,当报上面那个错误时,代码可以改成类似以下:
- void authOK(AuthorizationResult auth)
- {
- App.Current.Dispatcher.Invoke((Action)(() =>
- {
- labInfo.Content = "登录成功";
- btnLogin.IsEnabled = true;
- labUser.Content = auth.User.Name;
- labToken.Content = auth.AccessToken;
- loginWin.Close();
- client.Close();
- }));
- }
深入阅读:
https://msdn.microsoft.com/en-us/magazine/cc163328.aspx
补充:
private void cmdBT_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(UpdateTextRight);
thread.Start();
}
private void UpdateTextRight()
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart) delegate()
{
txt.Text = "Here is some new text.";
}
);
}
以及:
BackgroundWorker