Я хочу сломать 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);
Да. В моем коде, если у нас есть только одна запись в DataBase, в то время этот код работает нормально, но когда у меня есть несколько записей, то время в моей второй функции Verification (IAsyncResult r) не ломается, когда мы получаем правильный результат , –
Должно быть остановлено, когда состояние пришло. но это не происходит в моем коде. –
Мой другой вопрос: EndVerify запустить async? –