當更新操作位於activity下時使用runonuithread方式。
示例:
runonuithread(() =>
);
採用c# 5.0 的新特性await實現非同步操作中可以不使用runonuithread,暫不建議使用。
示例:
public async void loadxamarin()
}
handler永遠都是在ui主線程,這就意味著對乙個控制項的修改永遠只會有乙個執行緒,不會存在多個執行緒同時修改乙個控制項。
服務沒有runonuithread 方法,在服務中可使用handler實現相同效果,有以下兩種方式。
一種是handler.sendmessage,發乙個訊息,再根據訊息,執行相關任務**。
另一種是handler.post(r),r是要執行的任務**。意思就是說r的**實際是在ui執行緒執行的,可以寫更新ui的**。
示例:
varmyhandler = new handler ();
myhandler.post(() => );
更新UI放在主線程的原因
1 在子執行緒中是不能進行ui 更新的,而可以立刻更新的原因是 子執行緒 執行完畢了,又自動進入到了主線程,這中間的時間非常的短,讓我們誤以為子執行緒可以更新ui。如果子執行緒一直在執行,則無法更新ui,因為無法進入到主線程。2 程式一開始執行就進入了主線程。3 處理某些資料太過費時,影響使用者互動...
Android 在子執行緒中更新主線程UI
最近發現以前在eclipse中使用的runonuithread在studio中不能使了,所以又找了幾個更新ui的方法 第一種方法 new handler context.getmainlooper post new runnable 第二種方法 如果當前執行緒是ui執行緒,那麼行動是立即執行。如果當...
如何實現非ui執行緒更新ui執行緒?
1.實現非ui執行緒更新ui執行緒的 2.編碼中出現的乙個錯誤及 之前的基本做法是使用invoke實現,這裡採用的是 net 4.0中的task來實現,如下 using system using system.collections.generic using system.componentmod...