2008-11-25 53 views
2

我正在製作一個簡單的圖像調試器展示臺。代碼如下。我不確定是否需要手動處理Image實例?因爲我正在製作一個窗體窗口和其中包含我的動態圖像的圖片框裏面..我需要添加一些特殊的代碼時,窗體終止,處置這個?我是否需要處理這個Image實例?

這裏的代碼..

using System.Diagnostics; 
using System.Drawing; 
using System.Windows.Forms; 
using Microsoft.VisualStudio.DebuggerVisualizers; 
using DebuggerVisualizers; 

[assembly: DebuggerVisualizer(
    typeof (ImageDebuggerVisualizer), 
    typeof (VisualizerObjectSource), 
    Target = typeof (Image), 
    Description = "Image Visualizer")] 

namespace DebuggerVisualizers 
{ 
    public class ImageDebuggerVisualizer : DialogDebuggerVisualizer 
    { 
     protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
     { 
      Image image = (Image) objectProvider.GetObject(); 
      Form form = new Form 
          { 
           Text = ("Image Visualizer - " + image.HorizontalResolution + " " + image.VerticalResolution), 
           Width = image.Width, 
           Height = image.Height 
          }; 

      PictureBox pictureBox = new PictureBox {Image = image, SizeMode = PictureBoxSizeMode.AutoSize}; 
      form.Controls.Add(pictureBox); 
      form.ShowDialog(); 
     } 
    } 
} 

感謝您的幫助:)

回答

2

你的Show方法改成這樣:

protected override void Show(IDialogVisualizerService windowService, 
    IVisualizerObjectProvider objectProvider)   
{    
    Image image = (Image) objectProvider.GetObject(); 
    using (Form form = new Form()) 
    {    
     PictureBox pictureBox = new PictureBox();  
     pictureBox.Image = image;   
     form.Controls.Add(pictureBox); 
     form.ShowDialog(); 
    } 
} 

的使用(){}塊將調用Dispose在表單上它關閉後,將表格上處理的一切也。

1

圖片框控件不處理圖像的,所以這是你的,是的。

+0

System.Drawing.Image實現IDisposable,所以你應該調用它的處置。 – 2008-11-25 14:15:03

+0

好的..那麼當表單被銷燬時,我需要的覆蓋是什麼? – 2008-11-25 14:20:34

1

嗯,我要在這邊出去,說你不應該把它處理掉。

我從來沒有創建一個可視化器,我不完全知道Visual Studio是這樣做的,但在我看來,如果你在可視化器中處理一個對象,你可能會破壞你正在調試的代碼。

這一切都歸結到這條線:

Image image = (Image) objectProvider.GetObject(); 

如果對象是不是克隆,那麼你將被處置多數民衆贊成正在調試的代碼創建的對象。代碼不會期望該對象突然丟棄,並且S會碰到風扇,至少不得不重新開始調試。

我會玩它安全,不要處置它。想一想 - 你在調試。這不是一個漫長的過程。如果你確實泄漏了一個位圖句柄,那麼它不是世界末日......

+0

我不認爲OQ是建議立即處理圖像,這將是一個大問題。他正在討論是否在表單關閉時顯式處理創建的PictureBox。 – MusiGenesis 2008-11-25 14:42:34

0

我認爲你應該處置它。它應該很容易,只需在方法的第一行(在Image image = ...行的周圍)添加一個using(),並在form.ShowDialog()之後結束它。

我認爲放置圖像是安全的,因爲如果要更改可視化對象,必須調用TransferData/TranferObject/ReplaceDat/ReplaceObject方法之一才能將其發回。

相關問題