ZKEmkeeper:事件没有触发,DLL看起来不起作用

我试着使用zkemkeeper sdk在使用InBios(Controller)指纹的应用程序上使用了一段时间 。 虽然我试图触发某些事件没有发生,我刚刚创建了一个控制台应用程序,用于测试SDK,然后开始在ASP.NET MVC上实现这里是我的代码,我首先连接到设备,然后我添加事件OnAttTransactionEx有人可以指向我我做错了什么。

这是我的代码:

private static void Main(string[] args) { CZKEMClass zkem = new CZKEMClass(); int idwErrorCode = 0; const string ipAddr = "10.0.1.240"; bool isConnected; try { isConnected = zkem.Connect_Net(ipAddr, Convert.ToInt32(4370)); } catch (Exception ext) { Console.WriteLine("Erro: " + ext); zkem.GetLastError(ref idwErrorCode); if (idwErrorCode != 0) { zkem.GetLastError(idwErrorCode); } else { Console.WriteLine("No data from terminal returns!"); } throw new Exception(); } if (isConnected) { //Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) zkem.EnableDevice(1, true); zkem.RegEvent(1, 65535); zkem.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx; string sdwEnrollNumber = ""; int idwVerifyMode = 0; int idwInOutMode = 0; int idwYear = 0; int idwMonth = 0; int idwDay = 0; int idwHour = 0; int idwMinute = 0; int idwSecond = 0; int idwWorkcode = 0; zkem.EnableDevice(1, false); //disable the device if (zkem.ReadGeneralLogData(1)) { //read all the attendance records to the memory while (zkem.SSR_GetGeneralLogData(1, out sdwEnrollNumber, out idwVerifyMode, out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute, out idwSecond, ref idwWorkcode)) { //get records from the memory DateTime datetime = new DateTime(idwYear, idwMonth, idwDay, idwHour, idwMinute, idwSecond); int unixDate = (int) datetime.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; try { Console.WriteLine(idwInOutMode); Console.WriteLine(sdwEnrollNumber); Console.WriteLine(unixDate); } catch (Exception ex) { //ignored } try { Console.WriteLine("inserted: " + $"{idwYear}/{idwMonth}/{idwDay} {idwHour}:{idwMinute}:{idwSecond}.000"); } catch (Exception ex) { } } } Console.WriteLine("Fim"); } else { zkem.GetLastError(ref idwErrorCode); if (idwErrorCode != 0) { zkem.GetLastError(idwErrorCode); } else { Console.WriteLine("No data from terminal returns!"); } } zkem.EnableDevice(1, true); Console.WriteLine("Teste"); do { while (!Console.KeyAvailable) { } } while (Console.ReadKey(true).Key != ConsoleKey.Escape); } public static void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode) { Console.WriteLine("Finger Recognized"); } 

您必须使用STA线程。

 Thread TT = new Thread(() => { CZKEMClass zkem = new CZKEMClass(); Application.Run(); }); TT.IsBackground = true; TT.SetApartmentState(ApartmentState.STA); TT.Start(); 

然后创建活动。 ZKEM事件触发STA线程。