protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         db.Dispose();
     }
     base.Dispose(disposing);
 }
        public void DestroyEx()
        {
            xeventsRunner = false;

            GC.Dispose();
            this.Dispose();
            xevents.Dispose();
            Screen.Dispose();
            Display.Dispose();

            if (WindowsThread != null)
            {
                if (WindowsThread.IsAlive)
                {
                    try { WindowsThread.Join(1000); }
                    catch { WindowsThread.Abort(); }
                    WindowsThread = null;
                }
            }
        }