public void TestDeviceImplementation()
 {
     var xmlString = File.ReadAllText(@"xml_loader_prefix.xml");
     const int packetLenght = 34;
     const int packetCount = 0x100;
     var buffer = new Byte[packetLenght * packetCount + xmlString.Length + 1];
     Array.Copy(Encoding.ASCII.GetBytes(xmlString), buffer, xmlString.Length);
     buffer[xmlString.Length] = 0x00;
     var memoryStream = new MemoryStream(buffer);
     var protocol = new FakeProtocol();
     var timer = new FakeTimer();
     var device = new TimerDeviceImpl(protocol, timer) {PacketLenght = packetLenght};
     _errorString = "";
     _finished = false;
     device.FinishedHandler += device_FinishedHandler;
     device.ErrorHandler += device_ErrorHandler;
     device.ProcessHandler += device_ProcessHandler;
     device.PacketHandler += device_PacketHandler;
     Assert.IsTrue(device.StartFlashing(memoryStream));
     for (var i = 0; i < 100; ++i)
         timer.Advance(3500);
     var iterCount = 0;
     while (!_finished) {
         protocol.Process();
         iterCount++;
         if (iterCount == 100)
             timer.Advance(1001);
     }
     Assert.AreEqual("", _errorString);
     Assert.AreEqual(packetCount + 1 + 100, protocol.PacketCount);
 }
 private void ButtonSelectFile_Click(object sender, RoutedEventArgs e)
 {
     var dlg = new Microsoft.Win32.OpenFileDialog {DefaultExt = ".tmr", Filter = "Файлы прошивки (*.tmr)|*.tmr"};
     var result = dlg.ShowDialog();
     if (result != true) return;
     _hexFilename = dlg.FileName;
     var x = new TimerDeviceImpl(new SerialProtocol("2323", 32));
     try {
         using (var s = new FileStream(_hexFilename, FileMode.Open)) {
             var b = x.GetBaudrateFromStream(s);
             if (b < 0) ProgressBar.Text = "Херню вы какую то выбрали, батенька";
             ComboBoxForSerialPortBaudrate.SelectedItem = b;
         }
     } finally {
         UpdateSettings();
     }
 }
 void bgWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     var worker = sender as BackgroundWorker;
     SetMaxValueForProgressBar(1000);
     SetValueForProgressBar(0);
     Debug.WriteLine(String.Format("background: {0}", Thread.CurrentThread.ManagedThreadId));
     if (worker == null)
         return;
     var portSetting = e.Argument as SerialPortSetting;
     if (portSetting == null)
         return;
     SetTextForProgressBar("Открываем порт " + portSetting.PortName);
     var device = new TimerDeviceImpl(new SerialProtocol(portSetting.PortName, portSetting.Baudrate));
     device.ProcessHandler += device_ProcessHandler;
     device.ErrorHandler += device_ErrorHandler;
     device.FinishedHandler += device_FinishedHandler;
     device.PacketHandler += device_PacketHandler;
     try {
         using (var stream = new FileStream(_hexFilename, FileMode.Open)) {
             if (!device.StartFlashing(stream)) {
                 e.Result = "Ошибка открытия последовательного порта";
                 return;
             }
             SetTextForProgressBar("Ожидаем ответа от таймера");
             _inProcess = true;
             _resultString = "";
             while (_inProcess) {
                 Thread.Sleep(20);
             }
         }
     } catch (Exception) {
         e.Result = "Не получилось открыть файл";
     }
     e.Result = _resultString;
 }