繁体   English   中英

多个 sta 线程在 Windows 窗体应用程序中不起作用

[英]Multiple sta threads not working in windows form application

我创建了一个 Windows 窗体应用程序,它与不同的考勤机连接并处理实时考勤事件。 应用程序在一台机器上运行良好。 但是当一台机器的多台机器出勤时,两个线程都会缓存,但我希望一个线程只处理一个机器事件。 而且我希望所有线程都使用单个窗口形式而不是多种形式工作。如何在单独的线程中处理多台机器连接。 在此先感谢您的帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using zkemkeeper;
using System.IO;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
         private System.Timers.Timer timer1 = null;
        string filePath = @"E:\file1.txt";
        bool connSatus = false;
        CZKEMClass axCZKEM1;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1 = new System.Timers.Timer();
            this.timer1.Interval = 30000;
            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
            timer1.Enabled = true;


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

                if (connSatus == true)
                {
                    this.axCZKEM1.OnVerify -= new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify2);
                    this.axCZKEM1.OnConnected -= new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected2);
                    this.axCZKEM1.OnAttTransaction -= new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction2);
                    this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx2);
                    this.axCZKEM1.OnDisConnected -= new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected2);
                    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.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify2);
                        this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx2);
                        this.axCZKEM1.OnAttTransaction += new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction2);
                        this.axCZKEM1.OnConnected += new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected2);
                        this.axCZKEM1.OnDisConnected += new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected2);
                        using (StreamWriter writer = new StreamWriter(filePath, true))
                        {
                            writer.WriteLine("attendnce transaction Events are registered... ");
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }

                    }
                }

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

            createComAndMessagePumpThread.Start();



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

                if (connSatus == true)
                {
                    this.axCZKEM1.OnVerify -= new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify);
                    this.axCZKEM1.OnConnected -= new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected);
                    this.axCZKEM1.OnAttTransaction -= new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction);
                    this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                    this.axCZKEM1.OnDisConnected -= new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected);
                    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.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify);
                        this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                        this.axCZKEM1.OnAttTransaction += new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction);
                        this.axCZKEM1.OnConnected += new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected);
                        this.axCZKEM1.OnDisConnected += new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected);
                        using (StreamWriter writer = new StreamWriter(filePath, true))
                        {
                            writer.WriteLine("attendnce transaction Events are registered... ");
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }

                    }
                }

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

            createComAndMessagePumpThread2.Start();


        }
        private void timer1_Tick(object sender, EventArgs e)
        {
                  /*  connSatus = axCZKEM1.Connect_Net("172.16.3.2", 4370);
                    using (StreamWriter writer = new StreamWriter(filePath, true))
                    {
                        writer.WriteLine("Machine is connected successfully on" + "Date :" + DateTime.Now.ToString() + "status" + connSatus);
                        writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                    }

                    if (connSatus == true)
                    {
                        this.axCZKEM1.OnVerify -= new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify);
                        this.axCZKEM1.OnConnected -= new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected);
                        //  this.axCZKEM1.OnAttTransaction -= new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction);
                        this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                        this.axCZKEM1.OnDisConnected -= new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected);
                        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.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify);
                            this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
                            //   this.axCZKEM1.OnAttTransaction += new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction);
                            this.axCZKEM1.OnConnected += new zkemkeeper._IZKEMEvents_OnConnectedEventHandler(axCZKEM1_OnConnected);
                            this.axCZKEM1.OnDisConnected += new zkemkeeper._IZKEMEvents_OnDisConnectedEventHandler(axCZKEM1_OnDisConnected);
                            using (StreamWriter writer = new StreamWriter(filePath, true))
                            {
                                writer.WriteLine("attendnce transaction Events are registered... ");
                                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                            }

                        }
                    }*/
        }
        private void axCZKEM1_OnDisConnected()
        {
            //lbRTShow.Items.Add("RTEvent OnDisConnected Has been Triggered");
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine("Machine is disconnected");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private 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);
            }
        }
        private void axCZKEM1_OnConnected()
        {
            //lbRTShow.Items.Add("RTEvent OnConnected Has been Triggered");
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" machine connected event is triggered sucessfully.");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void axCZKEM1_OnVerify(int iUserID)
        {

            //lbRTShow.Items.Add("RTEvent OnVerify Has been Triggered,Verifying...");
            if (iUserID != -1)
            {

                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User is veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
            else
            {
                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User is not veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
        }
        private void axCZKEM1_OnAttTransaction(int iEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond)
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" OnAttTrasaction Has been Triggered,Verified OK on" + "Date :" + "Enrollnumber" + iEnrollNumber + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
            //lbRTShow.Items.Add("RTEvent OnAttTrasaction Has been Triggered,Verified OK");
            //lbRTShow.Items.Add("...UserID:" + iEnrollNumber.ToString());
            //lbRTShow.Items.Add("...isInvalid:" + iIsInValid.ToString());
            //lbRTShow.Items.Add("...attState:" + iAttState.ToString());
            //lbRTShow.Items.Add("...VerifyMethod:" + iVerifyMethod.ToString());
            //lbRTShow.Items.Add("...Time:" + iYear.ToString() + "-" + iMonth.ToString() + "-" + iDay.ToString() + " " + " " + iHour.ToString() + ":" + iMinute.ToString() + ":" + iSecond.ToString());
        }





        private void axCZKEM1_OnDisConnected2()
        {
            //lbRTShow.Items.Add("RTEvent OnDisConnected Has been Triggered");
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine("Machine2 is disconnected");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void axCZKEM1_OnAttTransactionEx2(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(" OnAttTrasactionEx2 Has been Triggered,Verified OK on" + "Date :" + "Enrollnumber" + sEnrollNumber + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void axCZKEM1_OnConnected2()
        {
            //lbRTShow.Items.Add("RTEvent OnConnected Has been Triggered");
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" machine2 connected event is triggered sucessfully.");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void axCZKEM1_OnVerify2(int iUserID)
        {

            //lbRTShow.Items.Add("RTEvent OnVerify Has been Triggered,Verifying...");
            if (iUserID != -1)
            {

                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User mach2 is veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
            else
            {
                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User mach2 is not veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
        }
        private void axCZKEM1_OnAttTransaction2(int iEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond)
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" OnAttTrasaction2 Has been Triggered,Verified OK on" + "Date :" + "Enrollnumber" + iEnrollNumber + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
            //lbRTShow.Items.Add("RTEvent OnAttTrasaction Has been Triggered,Verified OK");
            //lbRTShow.Items.Add("...UserID:" + iEnrollNumber.ToString());
            //lbRTShow.Items.Add("...isInvalid:" + iIsInValid.ToString());
            //lbRTShow.Items.Add("...attState:" + iAttState.ToString());
            //lbRTShow.Items.Add("...VerifyMethod:" + iVerifyMethod.ToString());
            //lbRTShow.Items.Add("...Time:" + iYear.ToString() + "-" + iMonth.ToString() + "-" + iDay.ToString() + " " + " " + iHour.ToString() + ":" + iMinute.ToString() + ":" + iSecond.ToString());
        }
    }
}

在您的代码中,您仅声明了一个 CZKEMClass 实例,但您使用了两个设备。 如果您有两个设备,并且需要实时处理这些设备的出勤事件,则必须为每个设备声明单独的 CZKEMClass 实例以从每个设备触发/捕获事件。 因此,在您的情况下,您需要声明两个 CZKEMClass 实例,因为您有两个设备。

这是您的示例代码更新后包含两个 CZKEMClass 实例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using zkemkeeper;
using System.IO;
using System.Threading;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string filePath = @"E:\file1.txt";
        bool connSatus = false;
        CZKEMClass axCZKEM1, axCZKEM2;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread createComAndMessagePumpThread = new Thread(() =>
            {
                axCZKEM1 = new CZKEMClass();
                connSatus = axCZKEM1.Connect_Net("162.36.2.24", 4370);
                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine("HR Machine is connected  at the" + "Date :" + DateTime.Now.ToString() + "status" + connSatus);
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }

                if (connSatus == true)
                {
                    axCZKEM1.OnVerify -= new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                    axCZKEM1.OnConnected -= new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                    axCZKEM1.OnAttTransaction -= new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                    axCZKEM1.OnAttTransactionEx -= new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx);
                    axCZKEM1.OnDisConnected -= new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                    if (axCZKEM1.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                    {
                        axCZKEM1.OnVerify += new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                        axCZKEM1.OnAttTransactionEx += new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx2;
                        axCZKEM1.OnAttTransaction += new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                        axCZKEM1.OnConnected += new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                        axCZKEM1.OnDisConnected += new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                        using (StreamWriter writer = new StreamWriter(filePath, true))
                        {
                            writer.WriteLine("attendnce transaction Events are registered... ");
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }

                    }
                }

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


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

                if (connSatus == true)
                {
                    axCZKEM2.OnVerify -= new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                    axCZKEM2.OnConnected -= new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                    axCZKEM2.OnAttTransaction -= new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                    axCZKEM2.OnAttTransactionEx -= new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx);
                    axCZKEM2.OnDisConnected -= new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                    if (axCZKEM2.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                    {
                        axCZKEM2.OnVerify += new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                        axCZKEM2.OnAttTransactionEx += new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx2;
                        axCZKEM2.OnAttTransaction += new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                        axCZKEM2.OnConnected += new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                        axCZKEM2.OnDisConnected += new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                        using (StreamWriter writer = new StreamWriter(filePath, true))
                        {
                            writer.WriteLine("attendnce transaction Events are registered... ");
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }

                    }
                }

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

        private void OnDisConnected()
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine("Machine is disconnected");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
        {
            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);
            }
        }
        private void OnConnected()
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" machine connected event is triggered sucessfully.");
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
        private void OnVerify(int iUserID)
        {
            if (iUserID != -1)
            {

                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User is veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
            else
            {
                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine(" User is not veified sucessfully.");
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
        }
        private void OnAttTransaction(int iEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond)
        {
            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine(" OnAttTrasaction Has been Triggered,Verified OK on" + "Date :" + "Enrollnumber" + iEnrollNumber + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }
    }
}

我有一个解决方案,首先像这样定义全局变量

IDictionary<string, CZKEMClass> device2FingersList = new Dictionary<string, CZKEMClass>();

然后你的代码

Thread createComAndMessagePumpThread = new Thread(() =>
            {
                device2FingersList[deviceIp] = new CZKEMClass();
                connSatus = device2FingersList[deviceIp].Connect_Net(deviceIp, 4370);
                using (StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine("HR Machine is connected  at the" + "Date :" + DateTime.Now.ToString() + "status" + connSatus);
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }

                if (connSatus == true)
                {
                    device2FingersList[deviceIp].OnVerify -= new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                    device2FingersList[deviceIp].OnConnected -= new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                    device2FingersList[deviceIp].OnAttTransaction -= new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                    device2FingersList[deviceIp].OnAttTransactionEx -= new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx);
                    device2FingersList[deviceIp].OnDisConnected -= new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                    if (device2FingersList[deviceIp].RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                    {
                        device2FingersList[deviceIp].OnVerify += new _IZKEMEvents_OnVerifyEventHandler(OnVerify);
                        device2FingersList[deviceIp].OnAttTransactionEx += new _IZKEMEvents_OnAttTransactionExEventHandler(OnAttTransactionEx2;
                        device2FingersList[deviceIp].OnAttTransaction += new _IZKEMEvents_OnAttTransactionEventHandler(OnAttTransaction);
                        device2FingersList[deviceIp].OnConnected += new _IZKEMEvents_OnConnectedEventHandler(OnConnected);
                        device2FingersList[deviceIp].OnDisConnected += new _IZKEMEvents_OnDisConnectedEventHandler(OnDisConnected);
                        using (StreamWriter writer = new StreamWriter(filePath, true))
                        {
                            writer.WriteLine("attendnce transaction Events are registered... ");
                            writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                        }

                    }
                }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM