2016-03-25 4 views
2

Я хочу сломать Verification(IAsyncResult r) когда status == NBiometricStatus.Ok но этот мой код не нарушает мой цикл, поэтому, пожалуйста, пожалуйста, помогите мне ...Как разбить IAsyncResult?

private void OnCapturingCompleted(IAsyncResult r) 
    { 
     var enrollTask = new NBiometricTask(NBiometricOperations.Enroll); 

     try 
     { 
      if (InvokeRequired) 
      { 
       BeginInvoke(new AsyncCallback(OnCapturingCompleted), r); 
      } 
      else 
      { 
       NBiometricStatus status = _mbiometricClient.EndCapture(r); 
       // If Stop button was pushed 
       if (status == NBiometricStatus.Canceled) return; 

       M_lblStatus.Text = status.ToString(); 
       if (status != NBiometricStatus.Ok) 
       { 
        _mbiometricClient.ForceStart(); 

       } 
       else 
       { 
        DataTable dt = QueryMaster.GetFaceData(); 


        for (int i = 0; i < dt.Rows.Count; i++) 
        { 
         byte[] b1 = System.Convert.FromBase64String(dt.Rows[i]["F_feature"].ToString()); 
         _Rsubject = new NSubject(); 
         _Rsubject.SetTemplateBuffer(NBuffer.FromArray(b1)); 

         if (_subject != null && _Rsubject != null) 
         { 
          _mbiometricClient.BeginVerify(_subject, _Rsubject, Verification, null); 
          if (result != null) 
          {         
           break; 
          } 
         } 

        } 
       } 
      } 
     } 
     catch (Exception ex) { } 
     finally 
     { 
         } 

    } 

    private void Verification(IAsyncResult r) 
    { 
     string msg; 
     try 
     { 
      if (InvokeRequired) 
      { 
       BeginInvoke(new AsyncCallback(Verification), r); 
      } 
      else 
      { 
       try 
       #region foreloop 
       { 

        foreach (NMatchingResult t in _subject.MatchingResults) 
        { 
         NBiometricStatus status = _mbiometricClient.EndVerify(r); 
         var verificationStatus = string.Format("Verification status: {0}", status); 
         if (status == NBiometricStatus.Ok) 
         { 
          //get matching score 
          int score = _subject.MatchingResults[0].Score; 
          msg = string.Format("Score of matched templates: {0}", score); 
          msg += " " + verificationStatus; 
          lblFinalStatus.Text = msg; 
          //MessageBox.Show(msg); 
          result = msg; 
          //EndInvoke(r); 
          Func<string> function = r.AsyncState as Func<string>; 
          msg = function.EndInvoke(r);        

          break; 
         } 
         else 
         { 
          lblFinalStatus.Text = verificationStatus; 
          count += 1; 
          if (count == 10) 
          { 
           MessageBox.Show(string.Format("{0}\n{1}", verificationStatus, "Face doesn't Exist..!")); 
          } 
          _mbiometricClient.ForceStart(); 
         } 
        } 

       } 
       catch (Exception ex) 
       { 
        Utils.ShowException(ex); 
       } 
       #endregion 

      } 
      if (result != null) 
      { 

       Func<string> function = r.AsyncState as Func<string>; 
       msg = function.EndInvoke(r); 
      } 
     } 
     catch (Exception ex) { } 


    } 

Это мой EndVerify()

public NBiometricStatus EndVerify(IAsyncResult asyncResult); 

Это мой BeginVerify()

public IAsyncResult BeginVerify(NSubject subject, AsyncCallback callback, object state); 

ответ

0

Уберись, что возвращено _mbiometricClient.EndVerify(r);результат исполнения. Кажется, что EndVerify все еще работает во время проверки status в инструкции if. Возможно, вы не получили результат задания. Мой ответ основан на предположении, что EndVerify является асинхронным.

+0

Да. В моем коде, если у нас есть только одна запись в DataBase, в то время этот код работает нормально, но когда у меня есть несколько записей, то время в моей второй функции Verification (IAsyncResult r) не ломается, когда мы получаем правильный результат , –

+0

Должно быть остановлено, когда состояние пришло. но это не происходит в моем коде. –

+0

Мой другой вопрос: EndVerify запустить async? –

 Смежные вопросы

  • Нет связанных вопросов^_^