@@ -325,6 +325,12 @@ protected override void Dispose(bool disposing)
325325 m_readTimer = null ;
326326 }
327327
328+ if ( ( object ) m_dataReader != null )
329+ {
330+ m_dataReader . Dispose ( ) ;
331+ m_dataReader = null ;
332+ }
333+
328334 if ( ( object ) m_archiveReader != null )
329335 {
330336 m_archiveReader . HistoricFileListBuildStart -= m_archiveReader_HistoricFileListBuildStart ;
@@ -521,6 +527,17 @@ private void StartDataReader(object state)
521527 }
522528 }
523529
530+ // Finished reading all available data
531+ private void RestartOrFinish ( )
532+ {
533+ m_readTimer . Enabled = false ;
534+
535+ if ( m_autoRepeat )
536+ ThreadPool . QueueUserWorkItem ( StartDataReader ) ;
537+ else
538+ OnProcessingComplete ( ) ;
539+ }
540+
524541 // Process next data read
525542 private void m_readTimer_Elapsed ( object sender , ElapsedEventArgs e )
526543 {
@@ -530,6 +547,12 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
530547 {
531548 try
532549 {
550+ if ( m_dataReader == null )
551+ {
552+ RestartOrFinish ( ) ;
553+ return ;
554+ }
555+
533556 IDataPoint currentPoint = m_dataReader . Current ;
534557 long timestamp = currentPoint . Time . ToDateTime ( ) . Ticks ;
535558 MeasurementKey key ;
@@ -564,6 +587,9 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
564587 }
565588 else
566589 {
590+ m_dataReader . Dispose ( ) ;
591+ m_dataReader = null ;
592+
567593 if ( timestamp < m_stopTime . ToDateTime ( ) . Ticks && m_startTime . ToDateTime ( ) . Ticks < timestamp )
568594 {
569595 // Could be attempting read with a future end time - in these cases attempt to re-read current data
@@ -572,25 +598,11 @@ private void m_readTimer_Elapsed(object sender, ElapsedEventArgs e)
572598 m_dataReader = m_archiveReader . ReadData ( m_historianIDs , m_startTime , m_stopTime ) . GetEnumerator ( ) ;
573599
574600 if ( ! m_dataReader . MoveNext ( ) )
575- {
576- // Finished reading all available data
577- m_readTimer . Enabled = false ;
578-
579- if ( m_autoRepeat )
580- ThreadPool . QueueUserWorkItem ( StartDataReader ) ;
581- else
582- OnProcessingComplete ( ) ;
583- }
601+ RestartOrFinish ( ) ;
584602 }
585603 else
586604 {
587- // Finished reading all available data
588- m_readTimer . Enabled = false ;
589-
590- if ( m_autoRepeat )
591- ThreadPool . QueueUserWorkItem ( StartDataReader ) ;
592- else
593- OnProcessingComplete ( ) ;
605+ RestartOrFinish ( ) ;
594606 }
595607
596608 break ;
0 commit comments