示例#1
0
 void ws_GetNumberCompleted(object sender, GetNumberCompletedEventArgs e)
 {
     this.resultParam = e;
     this.eventComplete.Set();
 }
示例#2
0
        // 异步版本,可以中断
        // return:
        //		-3	需要回答问题
        //      -2  尚未登录(info.UserID为空)
        //      -1  出错
        //      0   成功
        public int GetNumber(
            DigitalPlatform.Stop stop,
            string strAuthor,
            bool bSelectPinyin,
            bool bSelectEntry,
            bool bOutputDebugInfo,
            out string strNumber,
            out string strDebugInfo,
            out string strError)
        {
            strNumber    = "";
            strDebugInfo = "";
            strError     = "";

REDO:
            ws.GetNumberCompleted += new GetNumberCompletedEventHandler(ws_GetNumberCompleted);

            try
            {
                this.eventComplete.Reset();
                ws.GetNumberAsync(strAuthor,
                                  bSelectPinyin,
                                  bSelectEntry,
                                  bOutputDebugInfo);

                while (true)
                {
                    Application.DoEvents();     // 出让界面控制权

                    if (stop != null)
                    {
                        if (stop.State != 0)
                        {
                            strError = "用户中断1";
                            return(-1);
                        }
                    }

                    bool bRet = this.eventComplete.WaitOne(10, true);
                    if (bRet == true)
                    {
                        break;
                    }
                }
            }
            finally
            {
                ws.GetNumberCompleted -= new GetNumberCompletedEventHandler(ws_GetNumberCompleted);
            }

            GetNumberCompletedEventArgs e = (GetNumberCompletedEventArgs)this.resultParam;

            if (e.Error != null)
            {
                strError = e.Error.Message;
                return(-1);
            }

            if (e.Cancelled == true)
            {
                strError = "用户中断2";
            }
            else
            {
                strError = e.strError;
            }

            strNumber    = e.strNumber;
            strDebugInfo = e.strDebugInfo;

            if (e.Result == -2)
            {
                if (DoNotLogin(ref strError) == 1)
                {
                    goto REDO;
                }
            }

            return(e.Result);
        }