none
CopyFromScreenのリソース開放について RRS feed

  • 質問

  • はじめまして。

     

    C#にてCopyFromScreenを連続で呼び出すようなプログラムを作成しています。

     

    気になる点はCopyFromScreenを呼び出すごとにGDIオブジェクトが消費されているように思えるのですが、

    問題ないのかということです。

     

    簡単なサンプルを提示します。

     

    プロジェクトの新規作成で、Windowsアプリケーションを選択します。

    自動作成されたフォームに以下のコードを記述します。

     

    コード ブロック

            protected override void OnPaint(PaintEventArgs e)
            {
                e.Graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), this.Size);
            }

     

     

    あとは、プログラムを実行し、OnPaintが呼び出されるようにWindowを開いたり閉じたりします。

     

    消費されるGDIオブジェクトの数はタスクマネージャから確認できます。

     

    2007年11月28日 9:34

回答

  • 別スレッドを参考に、解決することができました。

     

    解決方法:

    GC.Collect();を挿入する。

     

    コード ブロック

            protected override void OnPaint(PaintEventArgs e)
            {
                e.Graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), this.Size);
                base.OnPaint(e);
                GC.Collect();
            }

     

     

     

    2007年12月10日 6:38