public LdpRemoteDesktopSender()
        {
            serverHandler = LdpServer.GetInstance();
            serverHandler.GetListenerChannel.AddListener(this);
            mouseController    = new LdpMouseController();
            keyboardController = new LdpKeyboardController();
            commander          = new LdpCommandController();

            packetFactory = new LdpProtocolPacketFactory();
            screenGrabber = new LdpScreenGrabber();
        }
        public void Dispose()
        {
            interruptGrabbing = false;
            serverHandler     = null;
            screenResponse    = null;
            packetFactory     = null;
            responsePacket    = null;

            try
            {
                if (ScreenThread != null && ScreenThread.IsAlive)
                {
                    ScreenThread.Abort();
                }
            }
            catch { }
            mouseController.Dispose();
            mouseController = null;

            keyboardController.Dispose();
            keyboardController = null;

            commander.Dispose();
            commander = null;

            screenGrabber.Dispose();
            screenGrabber = null;

            if (nextScreen != null)
            {
                nextScreen.Dispose();
            }
            if (prevScreen != null)
            {
                prevScreen.Dispose();
            }
            if (difference != null)
            {
                difference.Dispose();
            }

            GC.SuppressFinalize(this);
        }