1. 程式人生 > >呼叫執行緒必須為 STA 因為許多 UI 元件都需要

呼叫執行緒必須為 STA 因為許多 UI 元件都需要

               

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();            }));        }
Dispatcher是一個執行緒控制器,反正你要控制執行緒裡跑的東西,就要經過它。那麼WPF裡面,有個所謂UI執行緒,後臺程式碼不能直接操作UI控制元件,需要的話,就要通過這個Dispatcher。

我的理解如此,未作深究,對WPF沒有多大興趣。人傻,就是這麼任性!