Question

Je crée un visualiseur de débogueur d’image simple. Le code est ci-dessous. Je ne suis pas sûr d'avoir besoin de supprimer manuellement l'instance Image? Parce que je crée une fenêtre de formulaire Windows et le PictureBox à l'intérieur qui contient mon image dynamique .. dois-je ajouter un code spécial lorsque le formulaire se termine, pour en disposer?

voici le code ..

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

merci pour toute aide:)

Était-ce utile?

La solution

Changez votre méthode Show en ceci:

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

Le bloc using () {} appelle Dispose sur le formulaire après sa fermeture, ce qui supprime également tout le contenu du formulaire.

Autres conseils

Le contrôle de la boîte à images ne supprime pas l'image, c'est donc votre choix, oui.

Euh, je vais faire un geste ici et dire que vous ne devriez pas en disposer.

Je n'ai jamais créé de visualiseur, et je ne sais pas si Visual Studio le fait, mais il me semble que si vous supprimez un objet dans un visualiseur, vous risquez de casser le code que vous déboguez.

Tout se résume à cette ligne:

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

Si cet objet n'est pas un clone, vous allez alors supprimer l'objet créé par le code en cours de débogage. Le code ne s'attendra pas à ce que cet objet soit supprimé brusquement et S touchera le ventilateur, ce qui vous obligera au moins à redémarrer le débogage.

Je ferais attention à ne pas en disposer. Pensez-y, vous êtes en train de déboguer. Ce n'est pas un processus de longue vie. Si vous perdez un descripteur bitmap, ce n'est pas la fin du monde ...

Je pense que vous devriez en disposer. Cela devrait être assez facile, il suffit d’ajouter un using () à la première ligne de votre méthode (autour de la ligne Image image ... ...) et de le terminer après le formulaire.ShowDialog ().

Je pense que vous pouvez supprimer l’image, car si vous souhaitez modifier l’objet visualisé, vous devez appeler l’une des méthodes TransferData / TranferObject / ReplaceDat / ReplaceObject pour la renvoyer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top