// Удаление контр. элем. protected override void Dispose(bool disposing) { if (graphicsDeviceService != null) { graphicsDeviceService.Release(disposing); graphicsDeviceService = null; } base.Dispose(disposing); }
// Получаем ссылку на синглетонный экземпляр. public static ScannerService AddRef(IntPtr windowHandle, int width, int height) { // Увеличиваем значение счётчика контр. элем., использующих устройство. if (Interlocked.Increment(ref referenceCount) == 1) // Потокобезопасное наращение счётчика по ссылке. { // Если это первый контр. элем., то для начала использования устройства // мы должны создать синглетонный экземпляр. singletonInstance = new ScannerService(windowHandle, width, height); } return singletonInstance; }
// Инициализация контр. элем. protected override void OnCreateControl() { // Не инициализируем графическое устройство если мы запущены в редакторе. if (!DesignMode) { graphicsDeviceService = ScannerService.AddRef(Handle, ClientSize.Width, ClientSize.Height); // Регистрируем службу, теперь компоненты типа ContentManager могут найти её. services.AddService<IGraphicsDeviceService>(graphicsDeviceService); // Даём производным классам шанс инициализировать себя. Initialize(); } base.OnCreateControl(); }