2008-11-25 60 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方法之一才能将其发回。

相关问题