您現在的位置: 365建站網 > 365學習 > 如何解決WinForm窗體顯示時黑屏或白屏反應慢問題

如何解決WinForm窗體顯示時黑屏或白屏反應慢問題

文章來源:365jz.com     點擊數:338    更新時間:2021-08-03 10:36   參與評論

WinForm窗體顯示時,時不時黑屏或者白屏,反應慢等問題的解決方案

網上有很多人說了各種解決方案,都無效,其根本原因是因為Panel控件本身的問題,把Panel控件改成Control就可以了,親測有效

鑒于很多項目都運行了很長時間,只有Panel控件都改成Control最快的方式是在winform.Designer.cs文件里把Panel的聲明和創建都改成Control即可。

無效的解決方案1:

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 雙緩沖

無效的解決方案2:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams paras = base.CreateParams;
        paras.ExStyle |= 0x02000000;
        return paras;
    }
}

image.png

WinForm窗體在使用過程中如果因為程序等待時間太久而導致窗體本身假死無法控制,會嚴重影響用戶的體驗,這種情況大多是UI線程被耗時長的代碼操作占用所致,可以新開一個線程用來完成耗時長的操作,然后再將結果返回到UI中呈現,這樣就不會占用到UI線程了,也就不會假死了,涉及Control的更新需要用到BeginInvoke方法

private void button1_Click(object sender, EventArgs e)
{
    Thread t1 = new Thread(delegate ()
    {
        bu1_Click();
    }
    );
    t1.IsBackground = true; //當主線程退出時,后臺線程會被CLR調用Abort()來徹底終止程序
    t1.Start();}


 = =

Control.BeginInvoke函數內的線程跟UI線程是同一個線程的,函數外的代碼所在進程則是另一個t1進程,所以異步在這里體現的是Control.BeginInvoke相對于t1線程的異步,并不是相對于UI線程的異步。


如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇


發表評論 (338人查看,0條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
------分隔線----------------------------
自拍偷拍福力视频,偷拍国际精品,麻豆一区福利电影,国产网红视频午夜福利,se视频大全,久久国产AV影院 公主被两个双胞胎师傅| 五月天人体艺术| 亚洲怡红院频在线视频| 国精品产露脸偷拍视频86| 11孩岁女被a片| 18禁无遮挡肉动漫在线播放| 人人做人人爱在碰免费导航| 禁忌乱偷在线观看全部| 久久人人做人人玩人人妻精品| 精品国产网红主播在线直播网| 在线|国产精品女主播阳台| 午夜福利1000集福利92| 欧美一级毛片在线观看| 美女趴跪式从后面进去动态图| 日本古代十大酷刑qvod| 18禁日本黄无遮挡禁动漫| 2020精品国产自在现线官网| 巨乳中文无码亚洲| 无翼乌漫画之本能觉醒| 免费三級片视频在线观看| 偷拍区小说区图片区另类| 人妻熟女少妇中文字幕| 草民午夜欧美限制a级福利片| 十八禁啪啦拍视频无遮挡| 欧美拍拍视频免费大全| 国产一区二区三区不卡在线观看| 男人边吃奶边做好爽免费视频| gogo大胆全球裸xxxx| 337p西西人体大胆瓣开下部| 中文字幕韩国三级理论| 女厕所bbwbbw| http://www.ubikweb.com