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

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

文章來源:365jz.com     點擊數:323    更新時間: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線程的異步。


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


發表評論 (323人查看,0條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
------分隔線----------------------------
365建站网-快速批量建站_企业免费建站_智能建站软件系统_在线建站和seo工具
国产太嫩了在线观看| 免费人成年短视频在线观看| 天堂网av| 亚洲欧美国产制服图片区| 我的娇妻queen| 日本特黄特黄刺激大片| 春色校园小说综合网| 中文无码欲求不满的人妻| 美女做爱视频| 欧美videosdesexo| 欧美同性videos可播放| 被情趣店老板调教h文| 亚洲成av人片在一线观看| 好看的女优| 欧美做人爱c视频在线版| 阿神的实况教室| 老老头老太牲交| 亚洲成av人片在一线观看| 朋友的妻子| 黄色的网站| 中国女人牲交视频免费| 把腿开大点惩罚鞭打调教| 这里只有精品| 粉色视频入口| http://www.vifpa.com