国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

C#閃爍問題解決方法

2024-07-21 02:28:14
字體:
供稿:網(wǎng)友

  自從米格的仁兄向我推薦c#之后,偶就誤入歧途的漸漸脫離了java陣營。最近在寫工具的時(shí)候,忽然發(fā)現(xiàn)了一個(gè)老生常談的閃爍問題,要知道這樣的問題在java swing里只要把doublebuffer設(shè)置為true基本上是不會(huì)發(fā)生的,但在c#上卻怎么也搞不定,竟然連雙緩沖都有問題,gdi+不會(huì)這么脆弱吧。

  偶再一次被微軟的花頭給戲弄了,無奈只好踏上了漫漫搜索之路,也不知道搜了多少帖子,找了多少資料,基本上都是無功而返,更可氣的是網(wǎng)上有些資料還騙人,偶試了試基本上都不行的,該閃的照樣閃的歡。有些方法像臟矩陣一樣要invalide部分更新區(qū)域,偶嫌他麻煩,幸好偶找到了一篇文章,講閃爍原理的,雖然偶過去自認(rèn)為了解閃爍原理,比如什么刷新周期,顯存之類的,不過偶還是耐著性子看了一遍,收獲頗豐,看來孔夫子的溫故而知新頗有道理!

  于是偶按照原理自己改起了代碼,沒想到還真讓我給解決了。c#控件之所以會(huì)閃爍,是因?yàn)閞efresh會(huì)把整個(gè)控件給清成背景色,然后再把圖像繪制上去,就算先把所有待畫的圖像繪制到緩沖上,然后再render到控件上,因?yàn)榍迤習(xí)r的顏色,相當(dāng)于中間插了一空白幀,當(dāng)刷新過快時(shí)也是會(huì)有閃爍的。

  偶的做法是:

  1.每幀控件創(chuàng)建一個(gè)graphics,記得一定是creategraphics而不是通過paint函數(shù)的那個(gè)參數(shù)e獲得。

  2.把待繪制的圖像繪制到緩沖上,緩沖大小為控件大小。

  3.刷新的時(shí)候調(diào)用invalidate(new rectangle(0, 0, 1, 1));

  4.在paint函數(shù)繪制緩沖,搞定!

  哈哈,相信大家看了都會(huì)了解,invalidate(new rectangle(0, 0, 1, 1));相當(dāng)于調(diào)用paint函數(shù),但卻不重繪控件,這樣中間那個(gè)空白幀就沒有了,閃爍當(dāng)然就消失啦!

  原理很重要啊很重要!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岐山县| 穆棱市| 静乐县| 石景山区| 军事| 济阳县| 郯城县| 元朗区| 高邑县| 遂宁市| 肥东县| 绵阳市| 清原| 宜城市| 陇西县| 阿荣旗| 高碑店市| 偃师市| 新宁县| 托里县| 新晃| 连城县| 进贤县| 化隆| 旅游| 夹江县| 榆社县| 肃北| 浙江省| 泸水县| 广灵县| 虎林市| 安仁县| 临夏县| 阳原县| 尚志市| 台南市| 红安县| 阜新| 卫辉市| 英吉沙县|