我正在通过从独立读取器读取指纹并将它们与数据库中的模板进行比较来创建指纹验证应用程序。读取器带有内置 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)
Normal Loop 能找到 Dbuserid,而 Parallel.For 找不到 Dbuserid。不确定是不是语法错误。欢迎大家指出。提前致谢!