首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZKemKeeper库中的实时事件处理程序未响应

ZKemKeeper库中的实时事件处理程序未响应
EN

Stack Overflow用户
提问于 2016-04-20 13:31:12
回答 1查看 2.1K关注 0票数 1

我创建了一个Windows服务,通过使用Interop.zkemkeeper库从指纹设备获取实时事件来获取出席率。在服务中,机器已成功连接,但服务没有响应OnAttTransactionEx实时事件,这意味着在成功连接到机器后,不会使用OnAttTransactionEx事件获取考勤。我不知道问题出在哪里。

以下是Windows服务的代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using System.IO;
using zkemkeeper;
using System.Threading;
using System.Windows.Forms;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
       // private System.Timers.Timer timer1 = null;
        string filePath = @"E:\file1.txt";
        bool connSatus = false;
        CZKEMClass axCZKEM1;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            /* timer1 = new Timer();
             this.timer1.Interval = 10000;
             this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
             timer1.Enabled = true;
           */
              axCZKEM1 = new zkemkeeper.CZKEMClass();
              Thread createComAndMessagePumpThread = new Thread(() =>
              {
                  connSatus = axCZKEM1.Connect_Net("192.169.9.34", 4370);
                  using (StreamWriter writer = new StreamWriter(filePath, true))
                  {
                      writer.WriteLine("Machine is connected on" + "Date :" + DateTime.Now.ToString() + "status" + connSatus);
                      writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                  }

                  if (connSatus == true)
                  {

                      this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);

                      if (axCZKEM1.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                      {

                          this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                          using (StreamWriter writer = new StreamWriter(filePath, true))
                          {
                              writer.WriteLine("finger print Event is registered... ");
                              writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                          }

                      }
                  }

                 Application.Run();
              });
              createComAndMessagePumpThread.SetApartmentState(ApartmentState.STA);

              createComAndMessagePumpThread.Start();


        }
        public 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)
        {
           // if (OnAttTransactionEx != null) OnAttTransactionEx(sEnrollNumber, iIsInValid, iAttState, iVerifyMethod, iYear, iMonth, iDay, iHour, iMinute, iSecond, iWorkCode, axCZKEM1.MachineNumber, Tag);
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" OnAttTrasactionEx Has been Triggered,Verified OK on" + "Date :" + "Enrollnumber" + sEnrollNumber + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            } 
        }


        protected override void OnStop()
        {
           // timer1.Enabled = false;
            this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
            axCZKEM1.Disconnect();

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine("Message is running on" + "Date :" + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-04-05 13:52:16

正确的版本是

代码语言:javascript
复制
protected override void OnStart(string[] args)
        {

              Thread createComAndMessagePumpThread = new Thread(() =>
              {
                  axCZKEM1 = new zkemkeeper.CZKEMClass();
                  connSatus = axCZKEM1.Connect_Net("192.169.9.34", 4370);
                  using (StreamWriter writer = new StreamWriter(filePath, true))
                  {
                      writer.WriteLine("Machine is connected on" + "Date :" + DateTime.Now.ToString() + "status" + connSatus);
                      writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                  }

                  if (connSatus == true)
                  {

                      this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);

                      if (axCZKEM1.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                      {

                          this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                          using (StreamWriter writer = new StreamWriter(filePath, true))
                          {
                              writer.WriteLine("finger print Event is registered... ");
                              writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                          }

                      }
                  }

                 Application.Run();
              });
              createComAndMessagePumpThread.SetApartmentState(ApartmentState.STA);

              createComAndMessagePumpThread.Start();


        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36734597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档