2014-07-05 74 views
0

我有這個函數在定時器上被調用。屏幕截圖然後用於檢查某些像素的顏色。如果這是相關的,我也使用Arduino的串行通信。生成屏幕截圖的函數會產生異常

private Bitmap Screenshot() 
    { 
     Bitmap bmpScreenshot; 
     bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
            Screen.PrimaryScreen.Bounds.Height); 
     Graphics g = Graphics.FromImage(bmpScreenshot); 
     g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); 
     return bmpScreenshot; 
    } 

,我發現了問題是,它運行一段時間,我得到以下錯誤後:

An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.Drawing.dll

其他信息:重疊I/O操作正在進行

我似乎無法找到任何地方這是什麼來源或如何解決它,任何幫助將是偉大的。

謝謝。

+0

好像你正在調用截圖太快。 – EZI

+0

什麼是定時器的intervall?你是否通過線路發送圖像?你存儲它嗎?你覆蓋以前的版本嗎? – TaW

+0

你的計時器多久開一次?顯然太頻繁了。 (當它不是真正的代碼時,發佈代碼並沒有什麼好處,因爲包含'new Bitmap'的行,所發佈的代碼片段將不會編譯。) –

回答

0

如果您不正確地處理其資源,則圖形是已知具有奇怪行爲的類。您需要處置在該方法中創建的Graphics對象。

private Bitmap Screenshot() 
{ 
    Bitmap bmpScreenshot; 
    bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
           Screen.PrimaryScreen.Bounds.Height); 
    using(Graphics g = Graphics.FromImage(bmpScreenshot)) 
    { 
     g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); 
     return bmpScreenshot; 
    } 
} 

另外,請確保您也在調用函數中處理了Bitmap

我不知道這是否能解決您的問題,但有可能。