亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 UI 線程的任務調用 Thread.Sleep(n) 可以凍結 UI 嗎?

從 UI 線程的任務調用 Thread.Sleep(n) 可以凍結 UI 嗎?

C#
繁花不似錦 2021-07-09 17:43:55
以下代碼抽象出我的實際任務,即遍歷位圖中的每個像素。myButtonCommand.execute(async () => {   await Task.Run(() => {       while(i++<1000000) {           // do some work           if(i % 1000 == 0) // only update on every 1000th iteration           {               ProgressChanged.Invoke(this, i); // fire update event               Thread.Sleep(n);           }       }   });});提供給myButtomCommand.execute在 UI 線程上運行的 lambda 。但是由于不能保證任務在 UI 線程上運行,這是否意味著調用Thread.Sleep(n)可能會凍結 UI 線程?潛在的問題是我需要更新進度條,Thread.Sleep(n)并且在任務旋轉時 UI 線程被阻塞?,F在,我最終做的是使用,Thread.Sleep(0)因此只有在另一個線程需要運行時它才會進入睡眠狀態。但我不明白為什么Thread.Sleep(n)首先需要使用,因為至少在我的測試中,它無論如何都在一個單獨的線程上。所以我對兩件事感到困惑:Thread.Sleep(n)從 UI 線程外的 Task調用是否安全?在我的示例中,Thread.Sleep(n)鑒于任務在單獨的線程上運行,為什么需要更新 UI?
查看完整描述

2 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

并且如果不執行 Thread.Sleep(n),則在任務旋轉時 UI 線程會被阻塞。

這意味著你只是在這里調用了太多的 Invokes。
GUI 線程沒有被“阻塞”,只是過度工作。

另一種可能更好的方法

 //if(i % 1000 == 0) 
   if(i % 1000000 == 0)


查看完整回答
反對 回復 2021-07-17
  • 2 回答
  • 0 關注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號