2016-09-21 2 views
1

Je suis stucked pendant un certain temps en essayant d'utiliser zkemkeeper sdk à utiliser sur une application qui utilise pour empreintes digitales un InBios (contrôleur). Alors que j'essaie de déclencher un événement rien ne se passe, je viens de créer une application console pour tester le SDK avant de commencer l'implémentation sur ASP.NET MVC voici mon code, je me connecte d'abord à l'appareil puis j'ajoute l'événement OnAttTransactionEx quelqu'un peut montrez-moi ce que je fais de mal.ZKEmkeeper: Les événements ne déclenchement, look DLL ne fonctionne pas comme

Voici mon code:

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"); 
    } 

Répondre

1

Vous devez utiliser le fil STA.

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

Puis créez un événement. Les événements ZKEM se déclenchent sur les threads STA.

+0

Merci, c'était vraiment utile –

+0

@WaldirDePaulaNeto comment avez-vous utilisé ceci dans votre code? – user5173426

+0

Cela génère une erreur puisque le 'Application' provient du' using System.Windows.Forms; 'comment l'utilisons-nous dans asp.net mvc? – user5173426