雙緩衝技術(C# GDI)

來源:互聯網
上載者:User

c#如何?防表單閃爍的功能。大家都會想到運用雙緩衝技術,那麼在c#中是如何做的?

1、 利用預設雙緩衝

(1)在應用程式中使用雙緩衝的最簡便的方法是使用 .NET Framework 為表單和控制項提供的預設雙緩衝。通過將 DoubleBuffered 屬性設定為 true。

       this.DoubleBuffered=true;

(2)使用 SetStyle 方法可以為 Windows 表單和所創作的 Windows 控制項啟用預設雙緩衝。

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

2、 手工設定雙緩衝

.netframework提供了一個類BufferedGraphicsContext負責單獨分配和管理圖形緩衝區。每個應用程式定義域都有自己的預設 BufferedGraphicsContext 執行個體來管理此應用程式的所有預設雙緩衝。大多數情況下,每個應用程式只有一個應用程式定義域,所以每個應用程式通常只有一個預設 BufferedGraphicsContext。預設 BufferedGraphicsContext 執行個體由 BufferedGraphicsManager 類管理。通過管理BufferedGraphicsContext實現雙緩衝的步驟如下:

(1)獲得對 BufferedGraphicsContext 類的執行個體的引用。

(2)通過調用 BufferedGraphicsContext.Allocate 方法建立 BufferedGraphics 類的執行個體。

(3)通過設定 BufferedGraphics.Graphics 屬性將圖形繪製到圖形緩衝區。

(4)當完成所有圖形緩衝區中的繪製操作時,可調用 BufferedGraphics.Render 方法將緩衝區的內容呈現到與該緩衝區關聯的繪圖圖面或者指定的繪圖圖面。

(5)完成呈現圖形之後,對 BufferedGraphics 執行個體調用釋放系統資源的 Dispose 方法。

完整的例子,在一個400*400的矩形框內繪製10000個隨機產生的小圓。

BufferedGraphicsContext current = BufferedGraphicsManager.Current; //(1)</p><p> BufferedGraphics bg;</p><p> bg = current.Allocate(this.CreateGraphics(),this.DisplayRectangle); //(2)</p><p> Graphics g = bg.Graphics;//(3)</p><p> //隨機 寬400 高400</p><p> System.Random rnd = new Random();</p><p> int x,y,w,h,r,i;</p><p> for (i = 0; i < 10000; i++)</p><p> {</p><p> x = rnd.Next(400);</p><p> y = rnd.Next(400);</p><p> r = rnd.Next(20);</p><p> w = rnd.Next(10);</p><p> h = rnd.Next(10);</p><p> g.DrawEllipse(Pens.Blue, x, y, w, h);</p><p> }</p><p> bg.Render();//(4)</p><p> //bg.Render(this.CreateGraphics());</p><p> bg.Dispose();//(5)<br />

3、   自己開闢一個緩衝區(如一個不顯示的Bitmap對象),在其中繪製完成後,再一次性顯示。

完整代碼如下:

Bitmap bt = new Bitmap(400, 400);</p><p> Graphics bg = Graphics.FromImage(bt);</p><p> System.Random rnd = new Random();</p><p> int x, y, w, h, r, i;</p><p> for (i = 0; i < 10000; i++)</p><p> {</p><p> x = rnd.Next(400);</p><p> y = rnd.Next(400);</p><p> r = rnd.Next(20);</p><p> w = rnd.Next(10);</p><p> h = rnd.Next(10);</p><p> bg.DrawEllipse(Pens.Blue, x, y, w, h);</p><p> }</p><p> this.CreateGraphics().DrawImage(bt, new Point(0, 0));<br />

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.