2016-10-04 29 views
1

我有網檢測代碼:每2毫秒C#屏檢測

private void timer1_Tick(object sender, EventArgs e) 
     { 
      pictureBox1.Image = CaptureScreen(); 
     } 

15秒後墜毀應用

private Image CaptureScreen() 
     { 
      Rectangle screenSize = Screen.PrimaryScreen.Bounds; 
      Bitmap target = new Bitmap(screenSize.Width, screenSize.Height); 
      using (Graphics g = Graphics.FromImage(target)) 
      { 
       g.CopyFromScreen(0, 0, 0, 0, new Size(screenSize.Width, screenSize.Height)); 
      } 
      return target; 
     } 

我用定時器調用它,因爲要使用多少內存。我如何防止這種情況發生?

+0

嘗試使用位圖目標的語句。可能沒有被處置。 –

回答

4

你應該處置你的位圖。在timer1_Tick方法:

var oldImage = pictureBox1.Image as IDisposable; 
pictureBox1.Image = CaptureScreen(); 
if (oldImage != null) 
{ 
    oldImage.Dispose(); 
} 

一些額外的信息: 的.NET Bitmap類 「封裝一個GDI +位圖」。調用Dispose允許重新分配映像使用的資源。

在釋放您對圖像的最後一個引用之前始終呼叫Dispose。否則,直到垃圾回收器調用Image對象的Finalize方法後,它所使用的資源纔會被釋放。

+0

這可行。謝謝。 –