protected override void Read() { using (var reader = new StreamReader(_fileName)) { // Similar to EventMessages.ReadOuterXml(), but send the messages to the handler as we // read them. var adaptor = new XmlReadAdaptor(new XmlTextReader(reader), Xml.Namespace); if (adaptor.IsReadingElement(Xml.EventMessagesElement)) { var messages = new EventMessages(); while (adaptor.ReadElement(Xml.EventMessageElement)) { // Check the reader wait handles - should we stop or pause? if (StopEvent.WaitOne(0, false)) { return; } if (PauseEvent.WaitOne(0, false)) { // Paused - wait for stop or continue. var pauseHandles = new[] { StopEvent, ContinueEvent }; switch (WaitHandle.WaitAny(pauseHandles)) { case 0: return; // Stop. case 1: break; // Continue. } } var message = new EventMessage(); message.ReadXml(adaptor.XmlReader); adaptor.ReadEndElement(); // Send to the message handler, if we have enough. messages.Add(message); if (messages.Count == Constants.MessageComponents.EventFile.MessageReaderBatchSize) { HandleEventMessages(messages); messages = new EventMessages(); } } // Send any remaining messages to the message handler. if (messages.Count > 0) { HandleEventMessages(messages); } } } OnExistingMessagesRead(System.EventArgs.Empty); }