2013-01-10 51 views
1

我的應用程序運行正常約5分鐘,然後它會拋出一些隨機System.ArgumentException如下面的截圖所示: 這裏的大問題是,這兩種觀點其實看起來是正確的,並且它在大約5分鐘內完全正常工作。 我的應用程序只是在一個單獨的線程中持續拍攝屏幕快照。隨機System.ArgumentException雖然採取了一定時間後的截圖

以下代碼將拍攝屏幕快照,並在此片段中引起System.ArgumentException(與截圖中的相同)。

Bitmap SNew = new Bitmap(NewRes.Width, NewRes.Height); 
using (Graphics g = Graphics.FromImage(SNew)) 
    g.CopyFromScreen(0, 0, 0, 0, new Size(NewRes.Width, NewRes.Height)); 

的相同的異常也可以發生在CopyFromScreen方法,具有相同的表面上正確NewRes值(而不是在我的代碼段的第一行存在的):

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


如果我把這個代碼放在try { } catch { }子句中,它的工作原理也是(在日誌彈出10次後,異常不再發生)。這當然不是一個好的解決方案,有時它會一直掛在這個異常之中,直到我重新啓動應用程序時纔會截圖。

我不知道爲什麼參數無效,什麼可能導致此。有任何想法嗎?

+2

你調用Dispose在你的位圖(以及任何其他的引用),當你用它完成了嗎? – Wolfwyrd

+0

這確實「固定」了問題的一部分,現在我通過CopyFromScreen在較長時間後出現內存不足。 – Tgys

回答

1

我可以肯定地向您提供的是一個具體的替代方案,它將生成相同的輸出,但不使用CopyFromScreen使用platform invoke直接與Windows API互操作。你可以在這裏找到一個完整的示例中,Hans Passant curtosy作爲一個問題here的響應。

我不能不過,告訴你肯定爲什麼您遇到的異常,但我可以從其他來源,如this thread推斷(順便特色漢斯再次爲nobugz),從我自己的經驗是CopyFromScreen是越野車和這種情況下,可能會遭受內存泄漏。考慮到我鏈接的線程,什麼版本的.NET Framework是你的目標框架?

+0

我使用.NET 3.5,它似乎根據鏈接主題導致此類問題。我正在測試你提供的替代品。 – Tgys

+0

讓我知道它是怎麼回事。 –

+0

與已遺忘的Dispose /在Bitmap對象上一起使用,已成功修復它。它現在跑了3個小時。 – Tgys

相關問題