WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,由于许多 UI 组件都须要 ”。多线程
如在winform下面,使用多线程时,控件的值读取是能够的,但若是要更改,那么就必须进行一些特别的处理。WPF中也同样。spa
首先,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(); })); }
Dispatcher是一个线程控制器,反正你要控制线程里跑的东西,就要通过它。那么WPF里面,有个所谓UI线程,后台代码不能直接操做UI控件,须要控制,就要经过这个Dispatcher。code