狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Winform-耗時(shí)操作導(dǎo)致界面渲染滯后

freeflydom
2025年2月7日 9:44 本文熱度 491

原因:
某些耗時(shí)操作阻塞了主線程。

理解上述原因,需先搞清楚Winform線程機(jī)制。主要有以下2點(diǎn)特性:1.單線程模型;2.依賴消息循環(huán)。
1.單線程模型
Winform 默認(rèn)是單線程。通常,所有的UI操作,包括控件更新、事件處理,都由主線程管理(也就是UI線程)。
任何在事件處理程序中運(yùn)行的代碼都會(huì)占用主線程。如果某個(gè)事件中有耗時(shí)很多的操作,就會(huì)阻塞線程。比如有時(shí)PictureBox.Image的顯示會(huì)滯后。
下面代碼中,pictureBox1的顯示會(huì)有滯后。背后的工作原理是:
“pictureBox1.Image = image0”運(yùn)行完成后,系統(tǒng)只是將 pictureBox1 的 Image 屬性更新,但不會(huì)立即觸發(fā)控件繪制。(實(shí)際的繪制操作是由消息循環(huán)處理的,在 WM_PAINT 消息中完成)
pictureBox1的屬性設(shè)置之后,如果緊接著有耗時(shí)操作占用UI線程,就會(huì)導(dǎo)致WM_PAINT無(wú)法及時(shí)處理,所以不能及時(shí)繪制。
最佳解決辦法:
避免在 UI 線程執(zhí)行耗時(shí)任務(wù)。將耗時(shí)任務(wù)移到后臺(tái)線程,可以確保 UI 線程始終空閑以處理消息循環(huán),比如使用 Task.Run 或 async/await。

private void button2_Click(object sender, EventArgs e)
{
    using (var session = new InferenceSession(_modelPath))
    {
        ......  // 無(wú)關(guān)代碼
        Bitmap image0 = new Bitmap(_imagePath);
        pictureBox1.Image = image0;
        // 以下是某耗時(shí)操作
        DenseTensor<float> inputTensor = PreprocessImage(image0);
        ......
    }
}

補(bǔ)充一點(diǎn):只有主線程可以訪問(wèn)或更新控件;如果要從其他線程訪問(wèn)、更新控件,要使用特定的線程間通訊,必須使用 Control.Invoke 或 Control.BeginInvoke 方法將操作封送到 UI 線程執(zhí)行。如果在后臺(tái)線程中得到某個(gè)變量,需要渲染到主界面,就需要用到Control.Invoke等方法。

2.依賴消息循環(huán)
UI線程依賴消息循環(huán)(Message Loop)處理用戶輸入、標(biāo)點(diǎn)擊等操作和系統(tǒng)消息。Application.Run 啟動(dòng)時(shí),UI線程進(jìn)入消息循環(huán)狀態(tài),不斷從消息隊(duì)列中提取消息并分發(fā)到對(duì)應(yīng)控件處理。上述提到的線程阻塞實(shí)際上是阻塞了消息循環(huán)。

上述2個(gè)特性明白之后,就能理解原因中提到的阻塞了。如果不理解,可以嘗試在pictureBox1.Image之后跟隨一個(gè)簡(jiǎn)單的耗時(shí)操作幫助理解。

轉(zhuǎn)自https://www.cnblogs.com/snowoct/p/18690950


該文章在 2025/2/7 9:44:38 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved