RFID.RFIDInterface.LakeChabotReader.BuildTables C# (CSharp) Méthode

BuildTables() public méthode

public BuildTables ( Object context, BackgroundWorker worker, int refreshMS ) : ReportBase
context Object
worker BackgroundWorker
refreshMS int
Résultat ReportBase
        public ReportBase BuildTables( Object context, BackgroundWorker worker, int refreshMS )
        {
            Debug.WriteLine( String.Format( "{0}() ThreadID = {1}", System.Reflection.MethodInfo.GetCurrentMethod( ).Name, Thread.CurrentThread.ManagedThreadId ) );

            if ( IsDisposed )
                throw new ObjectDisposedException( "LakeChabotReader" );

            if ( Mode != rfidReader.OperationMode.BoundToReader )
                return new rfidSimpleReport( context, OperationOutcome.FailByContext,
                    new rfidException( rfidErrorCode.ReaderIsNotBound, "Reader must be bound before invoking BuildTables." ) );

            if ( _control.State != FunctionControl.FunctionState.Idle )
                return new rfidSimpleReport( context, OperationOutcome.FailByContext, new Exception( "Cannot build tables, the prior task has not completed" ) );

            if ( null == worker )
                return new rfidSimpleReport( context, OperationOutcome.FailByApplicationError, new ArgumentNullException( "worker", "BackgroundWorker is required" ) );

            if ( refreshMS < MIN_REFRESH_MS || refreshMS > MAX_REFRESH_MS )
                return new rfidSimpleReport( context, OperationOutcome.FailByApplicationError, new ArgumentOutOfRangeException( "refreshMS", refreshMS, string.Format( "Value must be between {0} and {1}", MIN_REFRESH_MS, MAX_REFRESH_MS ) ) );

            _refreshRateMS = refreshMS;
            _bgdWorker = worker;
            _periodTagList.Clear( );
            _requestTagList.Clear( );
            rfidOperationReport report
                = new rfidOperationReport( context,
                                           ElapsedMilliseconds,
                                           RequestCount,
                                           ProcessedAntennaCycleCount,
                                           ProcessedInventoryCycleCount,
                                           BadPacketCount,
                                           CRCErrorCount,
                                           ProcessedPacketCount,
                                           ProcessedRoundCount,
                                           ProcessedInventoryCount,
                                           SessionUniqueTags,
                                           RequestUniqueTags,
                                           CurrentUniqueTags,
                                           SessionDuration );

            DateTime ReportDue = DateTime.Now.AddMilliseconds( refreshMS );
            OperationOutcome outcome = OperationOutcome.Success;
            _control.StartAction( );

            int totalPacketsToProcess = FileHandler.TotalPacketCount - ProcessedPacketCount;
            int localPacketCount = 0;

            PacketData.PacketWrapper envelope;

            while ( ( envelope = FileHandler.GetPendingPacket( ) ) != null )
            {
                localPacketCount++;
                ProcessPacket( envelope );
                DateTime now = DateTime.Now;
                if ( ReportDue.Ticks <= now.Ticks )
                {
                    _bgdWorker.ReportProgress(
                        ( int ) ( 100 * ( ( float ) localPacketCount / ( float ) totalPacketsToProcess ) ),
                        report.GetProgressReport( ElapsedMilliseconds,
                                                  RequestCount,
                                                  ProcessedAntennaCycleCount,
                                                  ProcessedInventoryCycleCount,
                                                  BadPacketCount,
                                                  CRCErrorCount,
                                                  ProcessedPacketCount,
                                                  ProcessedRoundCount,
                                                  ProcessedInventoryCount,
                                                  SessionUniqueTags,
                                                  RequestUniqueTags,
                                                  CurrentUniqueTags,
                                                  SessionDuration ) );
                    _periodTagList.Clear( );
                    ReportDue = now.AddMilliseconds( refreshMS );
                }
                FunctionControl.RequestedAction action = FunctionController.GetActionRequest( );
                if ( action != FunctionControl.RequestedAction.Continue )
                {
                    break;
                }
            }

            switch ( _control.State )
            {
                case FunctionControl.FunctionState.Stopping:
                    outcome = OperationOutcome.SuccessWithUserCancel;
                    break;

                case FunctionControl.FunctionState.Aborting:
                    outcome = OperationOutcome.FailByUserAbort;
                    break;

                case FunctionControl.FunctionState.Running:
                    outcome = OperationOutcome.Success;
                    break;

                case FunctionControl.FunctionState.Idle:
                case FunctionControl.FunctionState.Paused:
                case FunctionControl.FunctionState.Unknown:
                default:
                    outcome = OperationOutcome.Unknown;
                    break;
            }

            _control.Finished( );

            report.OperationCompleted( outcome,
                                       ElapsedMilliseconds,
                                       RequestCount,
                                       RawAntennaCycleCount,
                                       RawInventoryCycleCount,
                                       BadPacketCount,
                                       CRCErrorCount,
                                       RawPacketCount,
                                       RawRoundCount,
                                       RawInventoryCount,
                                       SessionUniqueTags,
                                       RequestUniqueTags,
                                       CurrentUniqueTags,
                                       SessionDuration );
            return report;
        }