ZKEmkeeper:事件未触发,DLL 看起来无法正常工作

ZKEmkeeper: Events not triggering, DLL look like not working

我尝试使用 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 线程上触发。