void ws_GetNumberCompleted(object sender, GetNumberCompletedEventArgs e) { this.resultParam = e; this.eventComplete.Set(); }
// 异步版本,可以中断 // 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); }