不在UI主線程下實現更新的方法

2021-10-14 23:45:48 字數 567 閱讀 4401

當更新操作位於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...