public void InvokeClientOnActiveDesktopSession(Action<IWcfClientSide> asyncResult) { var timeoutTime = DateTime.Now + TimeSpan.FromSeconds(10); var desktopSessionId = DesktopSessionHelper.GetActiveSessionId(); var removes = new List<ClientInfo>(); foreach (var item in _clients) { if (item.DesktopSessionId == desktopSessionId) { if (Invoke(asyncResult, item)) return; removes.Add(item); } } foreach (var item in removes) _clients.Remove(item); // connected client not found, so launch new client RegisterListener rl = new RegisterListener { DesktopSessionId = desktopSessionId, AsyncResult = asyncResult, TimeoutTime = timeoutTime, }; lock (_registerListeners) { _registerListeners.Add(rl); } var path = CWService.GetProgramFileInfo().FullName; DesktopSessionHelper.LaunchInActiveSession(path); }
void RegisterListenerWork() { RegisterListener listenRegister = RegisterListener.Instance; listenRegister.Listener(); }