private void Cleanup()
 {
     if (IsConnected)
     {
         Win32.ShowSystemCursor();
     }
     else if (mouseHandler != null)
     {
         mouseHandler.Dispose();
         mouseHandler = null;
     }
     disposed = true;
     if (serviceClient != null)
     {
         if (IsConnected)
         {
             serviceClient.UnregisterApplication();
         }
         if (serviceClient.State == CommunicationState.Opened)
         {
             serviceClient.Close();
         }
         serviceClient = null;
     }
 }
        private void ConnectToMultitouchService()
        {
            Uri                 uri              = new Uri("net.pipe://localhost/Danilins.Multitouch.Logic.Service/MultitouchService");
            EndpointAddress     remoteAddress    = new EndpointAddress(uri);
            NetNamedPipeBinding namedPipeBinding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);


            callbackHandler = new MultitouchServiceCallbackHandler(this);
            InstanceContext context = new InstanceContext(callbackHandler);

            serviceClient = new MultitouchServiceClient(context, namedPipeBinding, remoteAddress);
            try
            {
                serviceClient.RegisterApplication();
                isConnected = true;
            }
            catch (EndpointNotFoundException)
            {
                Trace.TraceWarning("Can't connect to Multitouch service. Falling back to single mouse input.");
                EnableSystemMouseInput();
            }
        }