void ReaderXP_StateChangedEvent(object sender, CSLibrary.Events.OnStateChangedEventArgs e)
        {
            this.BeginInvoke((System.Threading.ThreadStart) delegate()
            {
                switch (e.state)
                {
                case RFState.IDLE:
                    watchrate.Stop();
                    //ControlPanelForm.EnablePannel(true);
                    EnableButton(ButtonState.Start, true);
                    EnableButton(ButtonState.Stop, false);
                    EnableTimer(false);
                    if (mStop)
                    {
                        this.Close();
                    }
                    break;

                case RFState.BUSY:
                    watchrate.Reset();
                    watchrate.Start();
                    totaltags = 0;
                    totalcrc  = 0;
                    EnableButton(ButtonState.Start, false);
                    EnableButton(ButtonState.Stop, true);
                    EnableTimer(true);
                    break;

                case RFState.RESET:
                    {
                        HighLevelInterface reader = (HighLevelInterface)(sender);

                        while (true)
                        {
                            if (reader.Reconnect(1) == Result.OK)
                            {
                                break;
                            }

                            Thread.Sleep(1000);
                        }
                    }


                    if (ControlPanelForm.ControlPanel.checkBoxLog.Checked)
                    {
                        TextWriter tw = new StreamWriter(CS203_CALLBACK_API_DEMO.ControlPanelForm.ControlPanel.textBox_LogPath.Text + "\\CycleLog.Txt", true);

                        tw.WriteLine("{0} : System Reset", DateTime.Now.ToString());

                        tw.Close();
                    }

                    //Use other thread to create progress
                    Reset();
                    //reset = new Thread(new ThreadStart(Reset));
                    //reset.Start();

                    break;

                case RFState.ABORT:
                    //ControlPanelForm.EnablePannel(false);
                    break;

                case RFState.ANT_CYCLE_END:
                    AntCycleCount++;
                    totaltagscycle     = totaltagsthiscycle;
                    totaltagsthiscycle = 0;

                    if (ControlPanelForm.ControlPanel.checkBoxLog.Checked)
//                               ControlPanelForm.ControlPanel.checkBoxSaveSummary.Checked)
                    {
                        int portbusy = 0;
                        int common   = 0;

                        //TextWriter tw = new StreamWriter(ControlPanelForm.SummaryFile, true);
                        TextWriter tw = new StreamWriter(CS203_CALLBACK_API_DEMO.ControlPanelForm.ControlPanel.textBox_LogPath.Text + "\\CycleLog.Txt", true);

                        tw.Write("{0} : Cycle {1}, {2} Tag/Cycle, Channel State : ", DateTime.Now.ToString(), AntCycleCount, totaltagscycle);

                        for (int cnt = 0; cnt < 16; cnt++)
                        {
                            if (Program.ReaderXP.ChannelStatus[cnt] == RFState.CH_BUSY)
                            {
                                portbusy = 1;
                                if (common == 0)
                                {
                                    tw.Write("Port Busy ");
                                }
                                else
                                {
                                    tw.Write(", ");
                                }
                                tw.Write("{0}", cnt);
                                common = 1;
                            }
                        }

                        if (portbusy == 0)
                        {
                            tw.WriteLine("CLEAR");
                        }
                        else
                        {
                            tw.WriteLine("");
                        }

                        tw.Close();
                    }
                    numChannelBusy = 0;

                    if (AntCycleTimeCount <= 4)
                    {
                        AntCycleTime[AntCycleTimeCount++] = Environment.TickCount;
                    }
                    else
                    {
                        AntCycleTime[0] = AntCycleTime[1];
                        AntCycleTime[1] = AntCycleTime[2];
                        AntCycleTime[2] = AntCycleTime[3];
                        AntCycleTime[3] = AntCycleTime[4];
                        AntCycleTime[4] = Environment.TickCount;
                    }

                    break;
                }
            });
        }