我正在制作一个简单的图像调试器可视化工具。代码如下。我不确定是否需要手动处理Image实例?因为我正在制作一个windows窗体窗口和其中包含动态图像的PictureBox。当窗体终止时,我需要添加一些特殊的代码来处理这个问题吗?
这是代码..
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();
}
}
}感谢您的帮助:)
发布于 2008-11-25 15:03:01
将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();
}
}using(){}块将在关闭后调用表单上的Dispose,这也将处理表单上的所有内容。
发布于 2008-11-25 13:55:59
图片框控件不会处理图像,所以这取决于您,是的。
发布于 2008-11-25 14:35:35
嗯,我要冒个险,说你不应该把它处理掉。
我从来没有创建过可视化工具,我也不是很清楚Visual Studio是怎么做的,但在我看来,如果在可视化工具中处理一个对象,可能会破坏正在调试的代码。
这一切都可以归结为这一行:
Image image = (Image) objectProvider.GetObject();如果该对象不是克隆对象,那么您将处理由正在调试的代码创建的对象。代码不会期望该对象突然被释放,并且S将命中风扇,导致您至少必须重新启动调试。
我会稳扎稳打,不会把它处理掉。想想看--你正在调试。这不是一个长期存在的过程。如果你真的泄露了一个位图句柄,那也不是世界末日…
https://stackoverflow.com/questions/317400
复制相似问题