0

C# の経験はありますが、WinForms は初めてです。

スクリーンショットを次のように取得するメソッドがありますBitMap

public Bitmap GetSreenshot() 
{
    Rectangle bounds = Screen.PrimaryScreen.Bounds;

    Bitmap bmp = new Bitmap(bounds.Width, bounds.Height,
        PixelFormat.Format32bppArgb);

    Graphics gfx = Graphics.FromImage(bmp);

    gfx.CopyFromScreen(bounds.X,
                                   bounds.Y,
                                   0,
                                   0,
                                   bounds.Size,
                                   CopyPixelOperation.SourceCopy);

    return bmp; 
} 

私の問題は、これを 100ms 間隔のタイマーで使用していることです。スクリーンショットを撮るたびに、UI スレッドが影響を受けていることがわかります (フォームを移動するときのラグなど)。

UI に影響を与えないように、別のスレッドでスクリーンショットを生成する方法はありますか? について何か読んだことがBackgroundWorkerありますが、それでよろしいですか?ここで誰かが私を正しい方向に向けることができれば幸いです。

4

1 に答える 1

2

コメントから回答まで:

バックグラウンド ワーカーは 1 つの方法ですが、.NET 4.0 が利用できる場合は、Task Parallel Library (Task および Task<>) を調べることもできます。.NET 4.5 は、便利な async/await パターンもサポートしています。

BackgroundWorker のタスク並列ライブラリの置き換え? このhttp://msmvps.com/blogs/brunoboucard/archive/2010/11/06/parallel-programming-with-c-4-0-part-3.aspxは、詳細情報を提供します

于 2012-12-13T09:29:23.570 に答える