private void bgwReceive_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.ProgressPercentage == 1)
            {
                SystemMessage message = e.UserState as SystemMessage;

                switch (message.Header.CommandID)
                {
                case MessageHeader.QM_UserList_Resp:
                    // 收到的消息是  当前用户列表.
                    UserListRespond userListRespond = message.Body as UserListRespond;
                    if (String.Join(",", this.UserList) != String.Join(",", userListRespond.UserList))
                    {
                        this.UserList = userListRespond.UserList;
                        this.lstUserList.DataSource = this.UserList;
                    }
                    break;

                case MessageHeader.QM_Ask_Resp:
                    // 收到的是 请求通话应答.
                    AskRespond askRespond = message.Body as AskRespond;
                    if (askRespond.Status == 1)
                    {
                        IPEndPoint userPoint = new IPEndPoint(IPAddress.Parse(askRespond.IpAddress), askRespond.Port);

                        if (!this.userDictionary.ContainsKey(askRespond.UserName))
                        {
                            this.userDictionary.Add(askRespond.UserName, userPoint);
                        }
                        else
                        {
                            // 刷新.
                            this.userDictionary[askRespond.UserName] = userPoint;
                        }

                        this.SendMessageStep2(userPoint, this.txtMessage.Text);
                    }
                    break;


                case MessageHeader.QM_Talk_Req:
                    // 收到的是 消息.
                    TalkRequest talkRequest = message.Body as TalkRequest;

                    string info = string.Format("{0} : {1} \r\n", talkRequest.FromUser, talkRequest.TalkMessage);

                    this.txtTalkResult.AppendText(info);

                    break;
                }
            }

            // 简单输出.
            ShowMessage(e.UserState.ToString());
        }
        /// <summary>
        /// 通话请求.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void Func2(object sender, EventArgs e)
        {
            FormSelectUser subForm = new FormSelectUser();

            subForm.UserList = this.userList;
            DialogResult diaResult = subForm.ShowDialog();

            if (diaResult == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

            // 已选择的用户.
            string selectUser = subForm.SelectUser;



            SystemMessage message = new SystemMessage()
            {
                Header = new MessageHeader()
                {
                    CommandID  = MessageHeader.QM_Ask_Req,
                    SequenceNo = this.sequence++,
                },

                Body = new AskRequest()
                {
                    UserToken   = userToken,
                    AskUserName = selectUser,
                },
            };

            // 发送登录消息.
            messageSender.SendMessage(message);
            ShowMessage("发送:" + message.ToString());


            // 接收反馈.
            SystemMessage resultMessage = messageReceiver.ReceiveMessage();

            ShowMessage("接收:" + resultMessage.ToString());


            AskRespond resultBody = resultMessage.Body as AskRespond;


            if (resultBody.Status > 0)
            {
                this.toUserIp   = resultBody.IpAddress;
                this.toUserPort = resultBody.Port;
            }
        }