public override void Unload()
 {
     base.Unload();
     updateTimer.Stop();
     updateTimer.Dispose();
     imageTexture.Dispose();
     imagePanel.Dispose();
     updateTimer      = null;
     imagePanel       = null;
     statusStrip      = null;
     visualizerCanvas = null;
     imageTexture     = null;
     visualizerImage  = null;
 }
        public override void Load(IServiceProvider provider)
        {
            StatusStripEnabled = true;
            visualizerCanvas   = new VisualizerCanvas {
                Dock = DockStyle.Fill
            };
            statusStrip = new StatusStrip {
                Visible = false
            };
            statusLabel = new ToolStripStatusLabel();
            statusStrip.Items.Add(statusLabel);
            visualizerCanvas.RenderFrame       += (sender, e) => RenderFrame();
            visualizerCanvas.Load              += (sender, e) => imageTexture = new NSK_IplImageTexture();
            visualizerCanvas.Canvas.MouseClick += (sender, e) => statusStrip.Visible =
                StatusStripEnabled &&
                e.Button == MouseButtons.Right ? !statusStrip.Visible : statusStrip.Visible;

            visualizerCanvas.Canvas.MouseMove        += (sender, e) => UpdateStatus();
            visualizerCanvas.Canvas.MouseDoubleClick += (sender, e) =>
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (visualizerImage != null)
                    {
                        imagePanel.Parent.ClientSize = new Size(visualizerImage.Width, visualizerImage.Height);
                    }
                }
            };

            imagePanel = new Panel {
                Dock = DockStyle.Fill, Size = new Size(320, 240)
            };
            imagePanel.Controls.Add(visualizerCanvas);
            imagePanel.Controls.Add(statusStrip);

            var visualizerService = (IDialogTypeVisualizerService)provider.GetService(typeof(IDialogTypeVisualizerService));

            if (visualizerService != null)
            {
                updateTimer          = new Timer();
                updateTimer.Interval = TargetInterval;
                updateTimer.Tick    += updateTimer_Tick;
                visualizerService.AddControl(imagePanel);
                updateTimer.Start();
            }

            base.Load(provider);
        }