初學unity,發現它和android一樣,沒法在子執行緒中修改ui,甚至沒法建立gameobject或者使用gameobject.find()
於是又只有拐著彎去實現執行緒間通訊。
我使用了一種方法,在這裡記錄一下,因為都是自己探索的,所以這個方法不一定所有情況都好用。
在乙個房間列表介面,房間列表的內容是從伺服器不斷接收的,所以不得不為socket的接收建立乙個子執行緒,接收到房間資訊之後需要在ui上顯示出來。
使用兩個全域性資料來維護房間資訊
public static dictionaryroom_dictionary = new dictionary(); //維護房間資訊
public static listui_room_list = new list(); //子執行緒中維護,主線程查詢,如果room沒顯示在ui上,則顯示
public static string room_onui_flag = "onui"; //ui上已經顯示房間
public static string room_noton_ui_flag = "outui"; //ui上未顯示房間
其中room_dictionary記錄現有房間資訊,key是房間名,value是房間狀態,ui_room_list記錄ui介面上還未顯示的房間。
當我們從伺服器接受到新建房間的資訊後,將房間名存入room_dictionary 並標記為room_noton_ui_flag。
這時在主線程中的update()中,不斷遍歷查詢room_dictionary中房間狀態,將標記為room_noton_ui_flag狀態的房間顯示在ui上即可。但查詢費時太多,會影響ui的幀率,所以多開乙個執行緒專門查詢,並將需要在ui上顯示的房間放入ui_room_list中,update()只需遍歷這個list即可。
總而言之,就是利用資訊維護為橋梁,不斷查詢某個資訊池來傳遞資訊。
Qthread執行緒修改UI
from pyqt5.qtcore import from pyqt5.qtgui import from pyqt5.qtwidgets import import time 訊號傳參型別 pyqtsignal 無引數訊號 pyqtsignal int 乙個引數 整數 的訊號 pyqtsignal...
C Wpf非同步修改UI,多執行緒修改UI(二)
1.使用定時器非同步修改 這是相對比較簡單的方法 在wpf中定時器使用diapatchertimer,不使用timer原因 在乙個應用程式中,timer會重複生成time事件,而dispatchertimer是乙個整合到了dispatcher佇列中的時鐘,這可以使它被按照指定的時間間隔以指定的pri...
跨執行緒修改UI控制項
1.直接修改,失敗引發異常.namespace test private void setlabeltext private void btnvisitlabel click object sender,eventargs e 2.使用 呼叫ui控制項的invoke方法修改,成功.namespace...