public BufferedTextFileReader(FileProcessingProvider processor, string path)
 {
     var fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
     var bs = new BufferedStream(fs);
     sr = new StreamReader(bs);
     this._processor = processor;
 }
        private void  ReadFileHandler()
        {
            ReadText = "Reading... " + (_counter++) + Environment.NewLine;

            var provider = new FileProcessingProvider();
            var processor = new CustomFileProcessor();
            processor.Subscribe(provider);

            var progress = new Progress<BufferedTextFileReaderArgs>();
            Debug.WriteLine("Add Progress Handler: " + Thread.CurrentThread.ManagedThreadId);
            progress.ProgressChanged += OnProgressChanged;

            ReadFileAsync(progress, provider).ContinueWith(antecedent =>
            {
                Debug.WriteLine("Continue With: " + Thread.CurrentThread.ManagedThreadId);
                DispatcherHelper.CheckBeginInvokeOnUI(
                    () =>
                    {
                        Debug.WriteLine("Remove Progress Handler: " + Thread.CurrentThread.ManagedThreadId);
                        progress.ProgressChanged -= OnProgressChanged;
                    });
            });
        }
 public async Task ReadFileAsync(IProgress<BufferedTextFileReaderArgs> progress, FileProcessingProvider provider)
 {            
     using (var fr = new BufferedTextFileReader(provider, FileName??@"c:\Temp\trTask_InsertUpdate.sql"))
     {
         await fr.ReadLineAsync(progress);                
     }
 }