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

@ 小浩發表於2019-01-02

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。

 

 

參考連結:https://www.cnblogs.com/xinaixia/p/5706096.html

相關文章