2

シンプルなイメージ デバッガー ビジュアライザーを作成しています。コードは以下です。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();
        }
    }
}

助けてくれてありがとう:)

4

4 に答える 4

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();
    } 
}

using(){} ブロックは、フォームを閉じた後に Dispose を呼び出し、フォーム上のすべてのものも破棄します。

于 2008-11-25T15:03:00.853 に答える
1

ピクチャ ボックス コントロールは画像を破棄しないので、これはあなた次第です。

于 2008-11-25T13:55:59.147 に答える
1

ええと、私はここで手足を出して、それを処分するべきではないと言います.

私はビジュアライザーを作成したことがなく、Visual Studio がこれを行うかどうかも正確にはわかりませんが、ビジュアライザーでオブジェクトを破棄すると、デバッグしているコードが壊れる可能性があるように思えます。

それはすべてこの行に帰着します:

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

そのオブジェクトがクローンでない場合は、デバッグ中のコードによって作成されたオブジェクトを破棄します。コードはそのオブジェクトが突然破棄されることを期待していないため、S がファンに当たるため、少なくともデバッグを再開する必要があります。

私はそれを安全にプレイし、処分しません。考えてみてください。デバッグ中です。それは長続きするプロセスではありません。ビットマップハンドルをリークしても、それは世界の終わりではありません...

于 2008-11-25T14:35:34.577 に答える
0

処分したほうがいいと思います。メソッドの最初の行 (Image image = ... 行の周り) に using() を追加し、form.ShowDialog() の後で終了するだけです。

視覚化されたオブジェクトを変更したい場合は、TransferData/TranferObject/ReplaceDat/ReplaceObject メソッドのいずれかを呼び出して送り返す必要があるため、画像を破棄しても安全だと思います。

于 2008-11-25T14:45:41.280 に答える