Multiple sta threads not working in windows form application

时间:2016-04-25 08:59:19

标签: c# winforms

I have created a Windows Form application which is connecting with different attendance machines and handling real time attendance events. 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());
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在您的代码中,您只声明了一个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);
            }
        }
    }
}

答案 1 :(得分:0)

我有一个解决方案给你 第一次定义全局变量

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