在非UI執行緒中自製Dispatcher

2022-02-22 07:29:23 字數 1347 閱讀 4082

在c#中,task.run當然是乙個很好的啟動新並行任務的機制,但是因為使用這個方法時,每次新的任務都會在乙個新的執行緒中(其實就是執行緒池中的執行緒)執行

這樣會造成某些情形下現場排程的相對困難,即使我隔離出乙個與ui無關的物件,然後用ui執行緒的dispatcher實現對ui執行緒的互動,但是用task啟動的多個任務執行緒卻難以管理,而且.net core uwp已經不再提供具體執行緒排程的管理了

最終我寫了個這個玩意

class nouidispatcher:idisposable

#endif

public async void start()

else

}od.waitone();

}normaltasklist = null;

system.diagnostics.debug.writeline(nameof(nouidispatcher) + " dispose");

}catch

});}

operationdeferral od = new operationdeferral();

list> normaltasklist = null;

public async task runasync(dispatchedhandler agilecallback)

*/lock (normaltasklist)

od.completewithoutdispose();

pk.waitone();

}#if debug

catch (exception e)

#else

catch

#endif

});}

public void run(dispatchedhandler agilecallback)

*/lock (normaltasklist)

od.completewithoutdispose();

}#if debug

catch (exception e)

#else

catch

#endif

}).ignorcompletion();

}bool isdispose = false;

public void dispose()

}public class operationdeferral

public void completewithoutdispose()

public void start()

public task waitoneasync()

catch

});}

public void waitone()

}

Android在非UI執行緒中更新UI的方法

在ui thread中建立handler。用sendmessage message 或者obtainmessage result,obj sendtotarget 在handlemessage方法中更新ui。推薦使用obtainmessage result,obj sendtotarget 由於這種...

在非UI執行緒使用Handler

handler物件所繫結的執行緒並不取決於該handler物件由哪個執行緒構建,而是取決於該handler物件所繫結的looper屬於哪個執行緒。looper就像乙個訊息佇列 messagequeue 的管家,乙個訊息佇列只有乙個管家,並且管理者整個訊息佇列,而乙個訊息佇列內可以容納多個訊息 mes...

如何實現非ui執行緒更新ui執行緒?

1.實現非ui執行緒更新ui執行緒的 2.編碼中出現的乙個錯誤及 之前的基本做法是使用invoke實現,這裡採用的是 net 4.0中的task來實現,如下 using system using system.collections.generic using system.componentmod...