Я создаю приложение для проверки отпечатков пальцев, считывая отпечатки пальцев из автономного считывателя и сравнивая их с шаблоном из базы данных. Читатель поставляется со встроенным SDK для простоты проверки соответствия отпечатка пальца или нет.
Используя обычный оператор Loop, будь то For Each или For Next, или даже Queue & Dequeue (который, конечно, не является Loop, нет проблем с получением правильного владельца захваченного отпечатка пальца. Все просто отлично .
Но когда я пытался преобразовать процесс в Parallel.For, мне показалось, что не удалось «найти» правильного владельца захваченного шаблона, или просто он не сможет выполнить соответствующий процесс.
'normal Loop through DataTable, working fine
'Capfpstr is the captured fingerprint from reader
'Zkfp.VerFingerFromStr is a build-in SDK function
Dtc = DataTable.Rows.Count.ToString
For i As Integer = 0 To Dtc - 1
Dbuserid = DataTable.Rows(i)(1) 'user id column
Dbfp = DataTable.Rows(i)(15) 'fingerprint template column
Dbfpstr = Convert.ToBase64String(Dbfp, 0, Dbfp.Length)
Userfound = Zkfp.VerFingerFromStr(Dbfpstr, Capfpstr, True, False)
If Userfound = True Then
FrmMAIN.LblUSER.Text = Dbuserid.ToString
Exit For
End If
Next i
'Parallel.For won't able to find the user id
'Capfpstr is the captured fingerprint from reader
'Zkfp.VerFingerFromStr is a build-in SDK function
Dtc = DataTable.Rows.Count.ToString
Parallel.For(0, Dtc, Sub(i)
Dbuserid = DataTable.Rows(i)(1) 'user id column
Dbfp = DataTable.Rows(i)(15) 'fingerprint template column
Dbfpstr = Convert.ToBase64String(Dbfp, 0, Dbfp.Length)
Userfound = Zkfp.VerFingerFromStr(Dbfpstr, Capfpstr, True, False)
If Userfound = True Then
FrmMAIN.LblUSER.Text = Dbuserid.ToString
Exit Sub
End If
End Sub)
Обычный цикл может найти Dbuserid, в то время как Parallel.For не может найти Dbuserid.
Не уверен, что это из-за синтаксической ошибки. Любой желающий может выделить.
Заранее спасибо!