private void LoadFiles(bool compressed) { if (IsProgramRunning()) { return; } var fileNames = SelectFiles(); if (fileNames.IsEmpty()) { return; } GeneralConfigurations.Get().Directory = Path.GetDirectoryName(fileNames[0]) + @"\"; TbSavePath.Text = GeneralConfigurations.Get().Directory; var factory = FactoryHolder.Get(); var producer = factory.NewProducer(fileNames, compressed); Adapter = NewAdapterBinding(); var consumer = factory.NewConsumer(producer, Adapter, fileNames.Length); consumer.SourceInvalid += ConsumerOnSourceInvalid; consumer.Update += ConsumerOnUpdate; consumer.ProducerEmpty += OnConsumerStopped; consumer.TargetAmountReached += OnConsumerStopped; PbLoading.Maximum = fileNames.Length; PbLoading.Value = 0; Scheduler = new Scheduler(producer, consumer); SetButtonRunning(); Scheduler.Start(); }
private void StartSample_OnClick(object sender, RoutedEventArgs e) { if (IsProgramRunning()) { return; } var numberDialog = new NumberDialog(); if (!numberDialog.ShowDialog().GetValueOrDefault(false)) { return; } var total = numberDialog.Number; if (total <= 0) { MessageBox.Show("plz input the number of records to be sampled."); return; } var factory = FactoryHolder.Get(); IProducerV2 <SampleRecord> producer; if (!factory.TryNewSampleProducer(out producer, total)) { SwitchButton.State = false; MessageBox.Show("Sampler can't be initialized"); return; } producer.ProductionFailed += exception => { Dispatcher.InvokeAsync(() => { SwitchButton.State = false; MessageBox.Show("Unable to sample data. Exception occured:\n\n" + exception.Message); }); }; // producer.HitTarget += () => { Dispatcher.InvokeAsync(() => { SwitchButton.State = false; }); }; PbLoading.Maximum = total; Adapter = NewAdapterBinding(); var threadNum = GeneralConfigurations.Get().ThreadNum; var workers = new List <SpecialSampleWriter>(threadNum); for (var i = 0; i < threadNum; i++) { workers.Add(new SpecialSampleWriter(GeneralConfigurations.Get().Directory, "[Binary]")); } var consumer = new DataSerializer(producer.BlockingQueue, workers, total); consumer.SourceInvalid += ConsumerOnSourceInvalid; consumer.Update += ConsumerOnUpdate; consumer.TargetAmountReached += () => { Dispatcher.InvokeAsync(() => { SwitchButton.State = false; }); }; CkCaptureSample.IsChecked = true; Scheduler = new Scheduler(producer, consumer); SetButtonRunning(); Scheduler.Start(); }
private DisplayAdapterV2 NewAdapter() { if (GeneralConfigurations.Get().ViewPhase) { return(FactoryHolder.Get() .NewPhaseAdapter(new CanvasView(ScopeCanvas), new HorizontalAxisView(HorAxisCanvas), new VerticalAxisView(VerAxisCanvas), TbXCoordinate, TbDistance)); } double?lockDipFreq; if (CorrectorConfigs.LockDip) { lockDipFreq = CorrectorConfigs.LockDipFreqInMHz; } else { lockDipFreq = null; } return(FactoryHolder.Get() .NewSpectrumAdapter(new CanvasView(ScopeCanvas), new HorizontalAxisView(HorAxisCanvas), new VerticalAxisView(VerAxisCanvas), TbXCoordinate, TbDistance, lockDipFreq, MiscellaneousConfigurations.Get().LockDipScanRadiusInMhz)); }
private void DebugCmd_OnClick(object sender, RoutedEventArgs e) { if (IsProgramRunning()) { return; } var fileNames = SelectFiles(); if (fileNames.IsEmpty()) { return; } GeneralConfigurations.Get().Directory = Path.GetDirectoryName(fileNames[0]) + @"\"; TbSavePath.Text = GeneralConfigurations.Get().Directory; var factory = FactoryHolder.Get(); var producer = factory.NewProducer(fileNames, true); Adapter = NewAdapterBinding(); var checkers = new List <PulseChecker>(); for (var i = 0; i < 4; i++) { checkers.Add(new PulseChecker(factory.NewCrestFinder(), factory.NewSlicer(), factory.NewPulsePreprocessor(), factory.NewCorrector())); } var consumer = new PulseByPulseChecker(producer.BlockingQueue, checkers, fileNames.Length); consumer.Update += ConsumerOnUpdate; PbLoading.Maximum = fileNames.Length; PbLoading.Value = 0; Scheduler = new Scheduler(producer, consumer); Scheduler.Start(); SetButtonRunning(); }
private void TurnOn() { GC.Collect(); if (_ultraFastMode) { var textBlock = new TextBlock { Text = "Happy 2016!", Foreground = new SolidColorBrush(Colors.Wheat), FontSize = 30 }; var canvasView = new CanvasView(ScopeCanvas); Canvas.SetTop(textBlock, canvasView.ScopeHeight / 2); Canvas.SetLeft(textBlock, canvasView.ScopeWidth / 3); canvasView.Canvas.Children.Add(textBlock); SwitchButton.State = false; return; } var factory = FactoryHolder.Get(); IProducerV2 <SampleRecord> producer; if (!factory.TryNewSampleProducer(out producer)) { SwitchButton.State = false; MessageBox.Show("Sampler can't be initialized. Maybe another instance is running."); return; } producer.ProductionFailed += exception => { Dispatcher.InvokeAsync(() => { SwitchButton.State = false; MessageBox.Show("Unable to sample data. Exceptions occured, please read carefully:\n\n" + exception.Message); }); }; Adapter = NewAdapterBinding(); int?targetCnt; var configs = GeneralConfigurations.Get(); if (configs.OperationMode == OperationMode.Manual) { targetCnt = null; } else { targetCnt = configs.TargetCnt; } var consumer = factory.NewConsumer(producer, Adapter, targetCnt); try { Adapter.StartFreqInMHz = Convert.ToDouble(TbStartFreq.Text); // todo move to constructor Adapter.EndFreqInMHz = Convert.ToDouble(TbEndFreq.Text); } catch (Exception) { } Scheduler = new Scheduler(producer, consumer); consumer.SourceInvalid += ConsumerOnSourceInvalid; consumer.Update += ConsumerOnUpdate; switch (configs.OperationMode) { case OperationMode.Manual: PbLoading.IsIndeterminate = true; break; case OperationMode.Single: consumer.TargetAmountReached += OnConsumerStopped; PbLoading.IsIndeterminate = false; PbLoading.Maximum = targetCnt.Value; break; case OperationMode.Loop: PbLoading.IsIndeterminate = false; PbLoading.Maximum = targetCnt.Value; consumer.TargetAmountReached += () => { OnConsumerStopped(); Dispatcher.Invoke(() => { SwitchButton.State = true; }); }; break; default: throw new ArgumentOutOfRangeException(); } PrepareStatsWinndow(); Scheduler.Start(); }