简体   繁体   English

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

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

I have created a Windows Form application which is connecting with different attendance machines and handling real time attendance events.我创建了一个 Windows 窗体应用程序,它与不同的考勤机连接并处理实时考勤事件。 Application works well with one machine.应用程序在一台机器上运行良好。 But with multiple machines attendance for one machine is cached by both threads but I want that one thread handles only one machine event.但是当一台机器的多台机器出勤时,两个线程都会缓存,但我希望一个线程只处理一个机器事件。 And I want that all threads work using single windows form not multiple forms.How to handle multiple machine connections in separate threads.而且我希望所有线程都使用单个窗口形式而不是多种形式工作。如何在单独的线程中处理多台机器连接。 Thanks in advance for any help.在此先感谢您的帮助。

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

In your code, you have declared only one CZKEMClass instance but you are using two devices.在您的代码中,您仅声明了一个 CZKEMClass 实例,但您使用了两个设备。 If you have two devices and you need real time handling of attendance events for these devices, you must declare separate CZKEMClass instances for each device to fire/capture the events from each device.如果您有两个设备,并且需要实时处理这些设备的出勤事件,则必须为每个设备声明单独的 CZKEMClass 实例以从每个设备触发/捕获事件。 Therefore, in your case you need to declare two CZKEMClass instances because you have two devices.因此,在您的情况下,您需要声明两个 CZKEMClass 实例,因为您有两个设备。

Here's your example code updated to include two CZKEMClass instances:这是您的示例代码更新后包含两个 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);
            }
        }
    }
}

i have a solution for you firs define global variable like that我有一个解决方案,首先像这样定义全局变量

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

Then your code然后你的代码

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