2011-01-20 18 views
1

我有一個函數,可以在指定的位置(使用來自winapi的GetPixel)在很短的時間(50毫秒)內檢查顏色。 現在我使用窗體上的計時器每隔50毫秒調用一次該函數,但是我的應用程序像地獄一樣凍結。線程上的CheckPixelColor

我該如何在一個單獨的線程中重複自己以使其無法凍結用戶界面?

回答

0

由於UI是STA線程,您不能從創建它的線程訪問它。或者你可以通過使用「Control.Invoke」,但在這種情況下,它運行在消息循環上,所以我認爲你也會遇到一些延遲。

4

我不得不建議在提出線程準備之前解決性能問題。 50毫秒是一個looong時間。此示例代碼對交互性沒有影響,也沒有對CPU的負荷由一個光點,即使它沒有被優化:

Random rand = new Random(); 

    private void timer1_Tick(object sender, EventArgs e) { 
     using (var bmp = new Bitmap(1, 1)) { 
      using (var gr = Graphics.FromImage(bmp)) { 
       gr.CopyFromScreen(rand.Next(800), rand.Next(600), 0, 0, new Size(1, 1)); 
       Console.WriteLine(bmp.GetPixel(0, 0).ToString()); 
      } 
     } 
    }