/// <summary>
        /// Set the contact's current availability value from Lync
        /// </summary>
        public void SetAvailability(ContactAvailability state)
        {
            try
            {
                LogManager.SystemLog.Debug(string.Format("SetAvailability state = {0}", state));
                //Add the availability to the contact information items to be published
                Dictionary<PublishableContactInformationType, object> newInformation =
                    new Dictionary<PublishableContactInformationType, object>();
                newInformation.Add(PublishableContactInformationType.Availability, state);
                _Client.Self.BeginPublishContactInformation(newInformation, PublishContactInformationCallback, null);

                UCContactAvailability ucAvailability = GetUCState(state);
                LogInBusiness log = new LogInBusiness();              
                log.PubSelfStatus((int)ucAvailability, new StringBuilder());
            }
            catch (Exception ex)
            {
                LogManager.SystemLog.Error(ex.ToString());
            }
        }
        void LyncClientStateChangedMethod(object ob)
        {
            ////通话时不能更改话机联动状态   2015/7/16
            ////You can't change joint type in a call
            //if (winCall != null)
            //{
            //    Dispatcher.Invoke(new Action(() =>
            //    {
            //        DialogShow.Show(StringHelper.FindLanguageResource("Cannotdothisincall"), StringHelper.FindLanguageResource("error"), 2);
            //        return;
            //    }));
            //}

            if (lockLyncUCLoginOut.TryEnterWriteLock(-1))
            {
                try
                {
                    ClientStateChangedEventArgs e = ob as ClientStateChangedEventArgs;
                    if (e.NewState == ClientState.SignedOut || e.NewState == ClientState.SigningOut)//lync登出
                    {
                        iWpfHeightButtomOff = iWpfHeightTopOff;
                        if (null != toolBar)
                        {
                            if (e.NewState == ClientState.SigningOut)
                            {
                                Visibility isVisible = Visibility.Visible;
                                Dispatcher.Invoke(new Action(() =>
                                {
                                    toolBar.Visible = false;
                                    isVisible = this.Visibility;
                                    //隐藏时不重新设置lync尺寸
                                    if (isVisible == Visibility.Visible && this.WindowState != WindowState.Maximized)
                                    {
                                        MoveWindowVisible();//恢复lync高度
                                    }
                                }), System.Windows.Threading.DispatcherPriority.Send);//隐藏工具盘 
                            }
                        }
                        LogInBusiness log = new LogInBusiness();
                        log.SignOut();//lync 注销时 注销UC

                    }
                    if (e.NewState == ClientState.SignedIn)//登录成功 开始订阅自身状态 
                    {
                        iWpfHeightButtomOff = 0;
                        WinOptionSettingViewModel set = new WinOptionSettingViewModel();

                        set.SaveLyncAccountToConfig(StringHelper.GetLyncNameString(_Client.Self.Contact.Uri));

                        _Client.Self.Contact.ContactInformationChanged += new EventHandler<ContactInformationChangedEventArgs>(Contact_ContactInformationChanged);

                        ContactSubscription foundContactSubscription = LyncClient.GetClient().ContactManager.CreateSubscription();
                        foundContactSubscription.AddContact(_Client.Self.Contact);
                        List<ContactInformationType> subscribeTypeList = new List<ContactInformationType>();
                        subscribeTypeList.Add(ContactInformationType.Availability);
                        foundContactSubscription.Subscribe(ContactSubscriptionRefreshRate.High, subscribeTypeList);

                        LyncSignedInFun();
                        //2015/8/14  登录时根据Lync状态获取UC状态 
                        GetLyncUserState();
                        GetUCState(userState);
                        LogInBusiness log = new LogInBusiness();
                        log.PubSelfStatus((int)userState, new StringBuilder());
                       
                    }
                    LogManager.SystemLog.Debug(string.Format("SingletonObj.LoginInfo = {0}", SingletonObj.LoginInfo));
                    LogManager.SystemLog.Debug(string.Format("Leave LyncClientStateChanged.NewState = {0}", e.NewState));
                }
                finally
                {
                    lockLyncUCLoginOut.ExitWriteLock();
                }
            }

        }
        /// <summary>
        /// lync 联系人信息变化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Contact_ContactInformationChanged(object sender, ContactInformationChangedEventArgs e)
        {           
            try
            {
                Contact contact = (sender as Contact);
                if (_Client.Self.Contact == null)
                {
                    return;
                }

                ContactAvailability availability = (ContactAvailability)contact.GetContactInformation(ContactInformationType.Availability);//Get the current availability value from Lync
                UCContactAvailability ucAvailability = GetUCState(availability);
                LogInBusiness log = new LogInBusiness();              
                log.PubSelfStatus((int)ucAvailability, new StringBuilder());
            }
            catch (System.Exception ex)
            {
                LogManager.SystemLog.Error(ex.ToString());
            }
        }