public WinCallViewModel(WinCall window, string str)
        {
            try
            {
                //if (SingletonObj.LoginInfo.LyncName != str.Split(';')[0] && str.Split(';').Length != 1)
                //{
                //    this.flag = false;
                //}
                //else
                //{
                //    this.flag = true;
                //}
                //StrTemp = winlync.strTempBool.ToString();
                callBackConfMemberEventCB = new ConfMemberEventCB(callBackConfMemberEventCBProcess);
                callBackVideoCallEventCB = new CallEventCB(callBackVideoCallEventCBProcess);
                callReservedEventCB = new CallReservedEventCB(callReservedEventCBProcess);
                callTransEventCB = new CallTransEventCB(callTransEventCBProcess);
                //modify by jinyeqing 2015/5/22   jiaji 说要把这三个事件回调函数放之前  (上下顺序倒了一下  下面的注释了)
                call.SetConfMemEventCallBack(callBackConfMemberEventCB);

                call.SetVideoCallEventCallBack(callBackVideoCallEventCB);

                call.SetCallReservedEventCallBack(callReservedEventCB);

                call.SetCallTransEventCallBack(callTransEventCB);
                //modify by jinyeqing 2015/5/22   jiaji 说要把这三个事件回调函数放之前  (上下顺序倒了一下  下面的注释了)
                winCall = window;

                VideoCommand = new DelegateCommand(VideoCommandProcess);
                CallSuspendCommand = new DelegateCommand(CallSuspendCommandProcess);
                HoldDownCommand = new DelegateCommand(HoldDownCommandProcess);
                SetMicPhoneCommand = new DelegateCommand(SetMicPhoneCommandProcess);
                AddContactCommand = new DelegateCommand(AddContactCommandProcess);

                HoldDownOneCommand = new DelegateCommand(HoldDownOneCommandProcess);
                ReInviteOneCommand = new DelegateCommand(ReInviteOneCommandProcess);

                MuteCommand = new DelegateCommand(MuteCommandProcess);
                RemoveCommand = new DelegateCommand(RemoveCommandProcess);
                OpenDialCommand = new DelegateCommand(OpenDialCommandProcess);
                SetVolCommand = new DelegateCommand(SetVolCommandProcess);
                BlindTransCallCommand = new DelegateCommand(BlindTransCallCommandProcess);
                this.winlync = winCall.lync;   //modify by 00327190 2015/7/16
                try
                {

                    lock (WinCall.lockObject)
                    {

                        try
                        {
                            LogManager.SystemLog.Info("WinCallViewModel Monitor.Enter");
                            contactList = new List<UCContact>();

                            string[] listStr = str.Split(';');
                            foreach (string con in listStr)
                            {
                                if (str.IndexOf("VideoCall") > -1 && contactList.Count == 2)
                                {
                                    break;
                                }
                                if (con == "VideoCall")
                                {
                                    IsVideo = true;
                                    continue;
                                }
                                UCContact uc = new UCContact();
                                uc.UserName = con;

                                if (contactList.Exists(x => x.UserName == uc.UserName))
                                {
                                    continue;
                                }

                                if (uc.UserName.IndexOf("@") != -1)
                                {
                                    uc.UCMemberType = MemberType.UC_ACCOUNT;
                                }
                                else  //如果是纯数字,则再分能不能查到对应的UC用户  2015/9/21
                                {
                                    StringBuilder ucName = new StringBuilder(100);
                                    call.GetUCAccountByPhoneNo(uc.UserName, ucName);
                                    if (ucName.ToString() == "")  //纯话机   2015/9/21
                                    {
                                        uc.UCMemberType = MemberType.UC_IPPHONE;
                                    }
                                    else
                                    {
                                        uc.UCMemberType = MemberType.UC_ACCOUNT;
                                        uc.UserName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName);
                                    }
                                    //uc.UCMemberType = MemberType.UC_IPPHONE;
                                }
                                if (contactList.Count == 0)
                                {
                                    if (IsVideo)
                                    {
                                        //2015/8/24    UTF8 转码UNICODE
                                        //byte[] buffer1 = Encoding.Default.GetBytes(str);
                                        //byte[] buffer2 = Encoding.Convert(Encoding.UTF8, Encoding.Default, buffer1, 0, buffer1.Length);
                                        //string strBuffer = Encoding.Default.GetString(buffer2, 0, buffer2.Length);
                                        winCall.Title = (uc.UserName == SingletonObj.LoginInfo.LyncName ? str.Split(';')[2].ToString() : uc.UserName);
                                    }
                                    else
                                    {
                                        //2015/8/24    UTF8 转码UNICODE
                                        //byte[] buffer1 = Encoding.Default.GetBytes(str);
                                        //byte[] buffer2 = Encoding.Convert(Encoding.UTF8, Encoding.Default, buffer1, 0, buffer1.Length);
                                        //string strBuffer = Encoding.Default.GetString(buffer2, 0, buffer2.Length);
                                        winCall.Title = (uc.UserName == SingletonObj.LoginInfo.LyncName ? str.Split(';')[1].ToString() : uc.UserName);
                                    }
                                    uc.IsLeader = true;
                                    uc.Mute = MemStatusInCall.CONF_MEM_INCONF;
                                }
                                else
                                {
                                    uc.Mute = MemStatusInCall.CONF_MEM_INVITING;
                                }
                                uc.Online = GetContactAvailability((int)uc.UCMemberType, StringHelper.GetSubString(uc.UserName));
                                contactList.Add(uc);
                            }

                            bool isConf = false;
                            if (contactList.Count > 2)
                            {
                                isConf = true;
                                StrTemp = isConf;
                            }
                            winCall.Render(contactList, isConf);
                        }
                        finally
                        {
                            LogManager.SystemLog.Info("WinCallViewModel Monitor.Exit");
                        }
                        //call.SetConfMemEventCallBack(callBackConfMemberEventCB);

                        //call.SetVideoCallEventCallBack(callBackVideoCallEventCB);

                        //call.SetCallReservedEventCallBack(callReservedEventCB);
                    }

                }
                catch (System.Exception ex)
                {
                    LogManager.SystemLog.Error(ex.ToString());
                }
            }
            catch (System.Exception ex)
            {
                LogManager.SystemLog.Error(ex.ToString());
            }
        }
        /// <summary>
        /// 增加新的与会人
        /// </summary>
        /// <param name="obj"></param>
        void GetSelectContactFun(object obj)
        {
            DataTable dt1 = (DataTable)obj;
            //modifty by 00327190  做校验,防止已经通话中的人再次入会
            for (int i = 0; i < contactList.Count; i++)
            {
                for (int j = 0; j < dt1.Rows.Count; j++)
                {
                    string b = dt1.Rows[j]["Url"].ToString().Trim();
                    if (b != "" && b != null)     //UC帐号和话机联动账号添加,url不空
                    {
                        string a = contactList[i].UserName.ToString().Trim();
                        //string c = a.Substring(0, a.Length - 10).ToString().Trim();   //这个是截取 @lync1.com之前的字符串的方法
                        if (String.Compare(a, b) == 0 || a.Equals(b) || a == b)
                        {
                            string message = (a) + " " + StringHelper.FindLanguageResource("theconferencehassameperson");
                            winCall.OpenDialogTiming(message, "error", 2);
                            dt1.Rows[j].Delete();
                           // return;
                        }
                    }
                    else   //话机添加(没有对应UC账号),url为空,只能根据phone比较
                    {

                        string a = contactList[i].UserName.ToString().Trim();
                        string d = dt1.Rows[j]["phone"].ToString().Trim();
                        if (String.Compare(a, d) == 0 || a.Equals(d) || a == d)
                        {
                            string message = (a)+ " " +StringHelper.FindLanguageResource("theconferencehassameperson");
                            winCall.OpenDialogTiming(message, "error", 2);
                            dt1.Rows[j].Delete();
                            //return;
                        }

                    }

                }

            }
            dt1.AcceptChanges();
            int count = dt1.Rows.Count + contactList.Count;
            if (dt1.Rows.Count != 0)
            {
                if (count <= 20)   //多于20个人就不添加了 (应该是原先列表加上新加的人数大于20才不添加)
                {
                    lock (WinCall.lockObject)
                    {

                        if (StrTemp == true)   //为conference 时,走这个接口
                        {
                            try
                            {

                                LogManager.SystemLog.Info("GetSelectContactFun Monitor.Enter");
                                DataTable dt = (DataTable)obj;
                                int type = 0;
                                foreach (DataRow dr in dt1.Rows)
                                {
                                    string str = dr["Url"].ToString() == "" ? dr["Phone"].ToString() : dr["Url"].ToString();
                                    string userName = "";
                                    if (str.IndexOf("sip") > -1)
                                    {
                                        str = str.Substring(str.IndexOf(":") + 1);
                                    }
                                    STConfMember ST = new STConfMember();
                                    StringBuilder ucName = new StringBuilder(100);
                                    // if (call.GetUCAccount(str, ucName) == 0)   //回调成功   modify by 00327190   之前没有if判断,现在只有能成功才可以入会
                                    //{
                                    if (dr["Name"].ToString() == "")
                                    {
                                        call.GetUCAccount(str, ucName);
                                        if (ucName.ToString() != "")
                                        {
                                            userName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName);
                                            type = 0;
                                            str = userName.ToString();
                                            //2015/8/6
                                            ST.membertype = type;
                                            ST.account = ucName.ToString();
                                        }
                                        else
                                        {
                                            userName = str;
                                            type = 1;
                                            //2015/8/6
                                            ST.membertype = type;
                                            ST.account = str;
                                        }
                                    }
                                    else
                                    {
                                        userName = str;
                                        type = 0;
                                        //2015/8/6
                                        ST.membertype = type;
                                        ST.account = str.Replace(StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName), "");
                                    }

                                    UCContact uc = new UCContact();

                                    uc.UCMemberType = (MemberType)type;
                                    uc.Mute = MemStatusInCall.CONF_MEM_INVITING;
                                    uc.UserName = userName;
                                    uc.Online = GetContactAvailability(type, StringHelper.GetSubString(uc.UserName));//查询uc状态

                                    contactList.Add(uc);

                                    call.InviteMemberInCall(type, new StringBuilder(StringHelper.GetSubString(str)));

                                    //}
                                    //else
                                    //{
                                    //    string message = StringHelper.FindLanguageResource("error") + (str);
                                    //    winCall.OpenDialogTiming(message, "error", 3);
                                    //}
                                }
                                IEnumerable<UCContact> noduplicates = contactList.Distinct(new ContactCompar());
                                List<UCContact> temp = new List<UCContact>();
                                foreach (var contact in noduplicates)
                                {
                                    temp.Add(contact);
                                }
                                contactList = temp;
                                winCall.Render(contactList);
                                winCall.IsEnableChanged();

                            }

                            finally
                            {
                                LogManager.SystemLog.Info("GetSelectContactFun Monitor.Exit");
                            }
                        }
                        else   ////为call 时,点呼转多人,走这个接口
                        {
                            StrTemp = true;
                            LogManager.SystemLog.Info("GetSelectContactFun Monitor.Enter");
                            DataTable dt = (DataTable)obj;
                            int type = 0;

                            STConfMemList ST1 = new STConfMemList();
                            ST1.stConfMem = new STConfMember[dt.Rows.Count];
                            ST1.size = dt.Rows.Count;
                            for (int i = 0; i < dt1.Rows.Count; i++)
                            {
                                DataRow dr = dt.Rows[i];
                                STConfMember ST = new STConfMember();

                                string str = dr["Url"].ToString() == "" ? dr["Phone"].ToString() : dr["Url"].ToString();
                                string userName = "";
                                if (str.IndexOf("sip") > -1)
                                {
                                    str = str.Substring(str.IndexOf(":") + 1);
                                }
                                StringBuilder ucName = new StringBuilder(100);
                                if (dr["Name"].ToString() == "")
                                {
                                    call.GetUCAccount(str, ucName);
                                    if (ucName.ToString() != "")
                                    {
                                        userName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName);
                                        type = 0;
                                        str = userName.ToString();
                                        ST.membertype = type;
                                        ST.account = ucName.ToString();
                                    }
                                    else
                                    {
                                        userName = str;
                                        type = 1;
                                        ST.membertype = type;
                                        ST.account = str;
                                    }
                                }
                                else
                                {
                                    userName = str;
                                    type = 0;
                                    ST.membertype = type;
                                    ST.account = str.Replace(StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName), "");
                                }

                                ST1.stConfMem[i] = ST;
                                ST1.size = i + 1;
                                UCContact uc = new UCContact();
                                uc.UCMemberType = (MemberType)type;
                                uc.Mute = MemStatusInCall.CONF_MEM_INVITING;
                                uc.UserName = userName;
                                uc.Online = GetContactAvailability(type, StringHelper.GetSubString(uc.UserName));//查询uc状态
                                contactList.Add(uc);

                            }
                            int iSizeSTContact = Marshal.SizeOf(typeof(STConfMember));
                            int iSizeSTContactList = Marshal.SizeOf(typeof(STConfMemList));
                            uiSize = iSizeSTContactList + (dt.Rows.Count - 1) * iSizeSTContact;
                            pSTContactList = StructToBytes(ST1);
                            if (call.UC_SDK_TransCallToConf(pSTContactList, uiSize) == 0)
                            {
                                IEnumerable<UCContact> noduplicates = contactList.Distinct(new ContactCompar());
                                List<UCContact> temp = new List<UCContact>();
                                foreach (var contact in noduplicates)
                                {
                                    temp.Add(contact);
                                }
                                contactList = temp;
                                winCall.Render(contactList);
                                //winCall.IsConf();
                                winCall.IsEnableChanged();
                            }
                            else
                            {
                                DialogShow.Show(StringHelper.FindLanguageResource("error"), StringHelper.FindLanguageResource("error"), 2);
                                return;
                            }
                        }
                    }

                }
                else
                {
                    winCall.OpenDialogTiming("somanypeople", "error", 2);
                    winCall.lync.setBtn();  //2015/8/17   之前由于视频转移导入的添加界面OK键使得加人键禁用原因
                    return;
                }
            }
            else
            {
                //winCall.OpenDialogTiming("PleaseAddOneAccountFirst", "error", 2);
                //return;
            }

            winCall.lync.setBtn();
        }
        void StartUpdateCallWin(object avParam)
        {
            lock (WinCall.lockObject)
            {
                //this.flag1 = false;
                try
                {
                    if (contactList != null)  //modify by 00327190   2015/8/10
                    {
                        LogManager.SystemLog.Info("StartUpdateCallWin Monitor.Enter");
                        STConfParam _avParam = new STConfParam();
                        _avParam = (STConfParam)avParam;
                        LogManager.SystemLog.Info("Start ConfMemberEventCB");
                        string str = _avParam.callerAcc_;
                        if (str == "")
                        {
                            if (_avParam.memStatus == (int)MemStatusInCall.CONF_MEM_SPK)
                            {
                                foreach (UCContact uc1 in contactList)
                                {
                                    uc1.IsSpeaker = false;
                                }
                            }
                            LogManager.SystemLog.Info("End ConfMemberEventCB1");
                            return;
                        }
                        else
                        {

                            if (contactList.FindIndex((x) => { return StringHelper.GetSubString(x.UserName) == str; }) == -1)
                            {
                                UCContact uc = new UCContact();
                                if (_avParam.memType == (int)MemberType.UC_IPPHONE)
                                {
                                    uc.UserName = str;
                                }
                                else
                                {
                                    uc.UserName = str + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName);
                                }
                                uc.Mute = (MemStatusInCall)_avParam.memStatus;
                                uc.UCMemberType = (MemberType)_avParam.memType;
                                uc.Online = GetContactAvailability(_avParam.memType, str);
                                //if 是modify by jinyeqing   之前是没有的
                                if (_avParam.memStatus != (int)MemStatusInCall.CONF_MEM_DEL)
                                {
                                    contactList.Add(uc);
                                }
                                winCall.Render(contactList);
                                //winCall.AddContactWinSize(contactList);
                                LogManager.SystemLog.Info("End ConfMemberEventCB2");
                                return;
                            }
                            else if (!winCall.IsConf())//修改呼叫三人会议,一人未接,被叫者不是会议状态的bug
                            {
                                winCall.Render(contactList);
                            }
                        }
                        UCContact ucFrist = contactList.First((x) => { return StringHelper.GetSubString(x.UserName) == str; });
                        if (ucFrist != null)
                        {
                            if ((_avParam.memStatus == (int)MemStatusInCall.CONF_MEM_DEL || _avParam.memStatus == (int)MemStatusInCall.CONF_MEM_QUIT)
                                && contactList.FindIndex((x) => { return x.IsLeader == true && StringHelper.GetSubString(x.UserName) == str; }) != -1)
                            {
                                //临时注释掉 会议主席离会时,关闭会议的处理,只更新状态
                                //winCall.CloseCallInThread();
                                ucFrist.Mute = (MemStatusInCall)_avParam.memStatus;
                                return;
                            }
                            switch (_avParam.memStatus)
                            {
                                case (int)MemStatusInCall.CONF_MEM_SPK:
                                    foreach (UCContact uc1 in contactList)
                                    {
                                        uc1.IsSpeaker = false;
                                    }
                                    ucFrist.IsSpeaker = true;
                                    break;
                                //case (int)MemStatusInCall.CONF_MEM_QUIT:
                                case (int)MemStatusInCall.CONF_MEM_DEL:
                                    contactList.Remove(ucFrist);
                                    winCall.Render(contactList);
                                    //  winCall.AddContactWinSize(contactList);
                                    break;
                                default:
                                    ucFrist.Mute = (MemStatusInCall)_avParam.memStatus;
                                    break;
                            }
                        }
                    }
                }
                finally
                {
                    LogManager.SystemLog.Info("End ConfMemberEventCB3");
                    LogManager.SystemLog.Info("StartUpdateCallWin Monitor.Exit");
                }
                //this.flag1 = true;
            }
        }