private void Scan_Click(object sender, RoutedEventArgs e) { LoadFrom loadFrom = new LoadFrom(); BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; bool WaitFalg = true; string ErrMsg = ""; worker.DoWork += delegate(object s, DoWorkEventArgs args) { DateTime fileBeforeCreatedTime = WanTai.Controller.EVO.ProcessorFactory.GetDateTimeNow(); Services.DeskTopService desktopService = new Services.DeskTopService(); try { desktopService.CallScanScript(); } catch (Exception ex) { MessageBox.Show("扫描错误!", "系统提示"); return; } //get data from scan files, check plates ,and update scan volume of reagents foreach (ReagentAndSuppliesConfiguration reagent in reagentAndSupplies) { reagent.FirstAddVolume = 0; } foreach (PlateBase plate in ViewPlates) { plate.FirstAddVolume = 0; } DataTable dtScan = GetScanResult(fileBeforeCreatedTime); DataTable dtDitiScan = GetDitiScanResult(fileBeforeCreatedTime); DataTable dtHeaterScan = GetHeaterScanResult(fileBeforeCreatedTime); CheckByScanResult(dtScan); CheckDitiByScanResult(dtDitiScan); CheckHeaterScanResult(dtHeaterScan); GetDetectedLiquid(fileBeforeCreatedTime); //if any plate of a reagent is incorrect this reagent is incorrect foreach (ReagentAndSuppliesConfiguration reagent in reagentAndSupplies) { List <PlateBase> plates = ViewPlates.FindAll(P => (P.ChineseName == reagent.DisplayName && P.ItemType == reagent.ItemType)); reagent.Correct = !plates.Exists(P => !P.Correct); //只更新第一個Plate的值 if (reagent.ItemType >= 100 && reagent.ItemType < 200) { PlateBase firstPlate = ViewPlates.FirstOrDefault(P => (P.ChineseName == reagent.DisplayName && P.ItemType == reagent.ItemType)); if (firstPlate != null) { firstPlate.FirstAddVolume = reagent.FirstAddVolume; } } } worker.ReportProgress(1, ErrMsg); while (WaitFalg) { Thread.Sleep(1000); } }; worker.ProgressChanged += delegate(object s, ProgressChangedEventArgs args) { //to show the last column which contains confirm buttons foreach (DataGrid dg in dataGridDictionary.Values) { dg.Columns[5].Visibility = Visibility.Visible; } //incorrect plates and corresponding reagents will shine BindRelatedControls(); UpdatePlates(); foreach (UIElement uiElement in DeskTopWithGrid.Children) { if (uiElement is CarrierBase) { ((CarrierBase)uiElement).ShiningStop(); ((CarrierBase)uiElement).Scan(); } } loadFrom.Close(); btnSave.IsEnabled = reagentAndSupplies.FirstOrDefault(P => P.Correct == false) == null; }; worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args) { }; worker.RunWorkerAsync(); loadFrom.ShowDialog(); /******************************************* * //call script and generate scan files * System.Windows.Input.Cursor currentCurson = this.Cursor; * this.Cursor = Cursors.Wait; * //call script and generate scan files * DateTime fileBeforeCreatedTime = WanTai.Controller.EVO.ProcessorFactory.GetDateTimeNow(); * Services.DeskTopService desktopService = new Services.DeskTopService(); * try * { * desktopService.CallScanScript(); * } * catch (Exception ex) * { * MessageBox.Show("扫描错误!"); * } * * //get data from scan files, check plates ,and update scan volume of reagents * foreach (ReagentAndSuppliesConfiguration reagent in reagentAndSupplies) * { * reagent.FirstAddVolume = 0; * } * foreach (PlateBase plate in ViewPlates) * { * plate.FirstAddVolume = 0; * } * DataTable dtScan = GetScanResult(fileBeforeCreatedTime); * DataTable dtDitiScan = GetDitiScanResult(fileBeforeCreatedTime); * DataTable dtHeaterScan = GetHeaterScanResult(fileBeforeCreatedTime); * * CheckByScanResult(dtScan); * CheckDitiByScanResult(dtDitiScan); * CheckHeaterScanResult(dtHeaterScan); * GetDetectedLiquid(fileBeforeCreatedTime); * * //if any plate of a reagent is incorrect this reagent is incorrect * foreach (ReagentAndSuppliesConfiguration reagent in reagentAndSupplies) * { * List<PlateBase> plates = ViewPlates.FindAll(P => (P.ChineseName == reagent.DisplayName && P.ItemType == reagent.ItemType)); * reagent.Correct = !plates.Exists(P => !P.Correct); * } * * //to show the last column which contains confirm buttons * foreach (DataGrid dg in dataGridDictionary.Values) * { * dg.Columns[5].Visibility = Visibility.Visible; * } * * //incorrect plates and corresponding reagents will shine * BindRelatedControls(); * UpdatePlates(); * foreach (UIElement uiElement in DeskTopWithGrid.Children) * { * if (uiElement is CarrierBase) * { * ((CarrierBase)uiElement).Scan(); * } * } * * Cursor = currentCurson; * btnSave.IsEnabled = reagentAndSupplies.FirstOrDefault(P => P.Correct == false) == null; ****************************************************************************************************/ }
private void btn_scan_Click(object sender, RoutedEventArgs e) { //System.Windows.Input.Cursor currentCurson = this.Cursor; // this.Cursor = Cursors.Wait; TubesScanParameter tubeScanParameter = new TubesScanParameter(); if (!(bool)tubeScanParameter.ShowDialog()) { MessageBox.Show("请输入要扫描的列数!", "系统提示!"); return; } btn_detail.IsEnabled = false; btn_Group.IsEnabled = false; btn_scan.IsEnabled = false; btn_Save.IsEnabled = false; btn_Next.IsEnabled = false; LoadFrom loadFrom = new LoadFrom(); BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; bool WaitFalg = true; bool scanResult = false; string ErrMsg = ""; SystemFluid = ""; worker.DoWork += delegate(object s, DoWorkEventArgs args) { //DateTime fileCreatedTime = WanTai.Controller.EVO.ProcessorFactory.GetDateTimeNow(); DateTime fileCreatedTime = DateTime.MinValue; TubesController controller = new TubesController(); if (SessionInfo.NextTurnStep == 0) { scanResult = true; string NextStepScanFinished = onNextStepScan("NextStepScan"); if (NextStepScanFinished != "NextStepScanFinished") { ErrMsg = "扫描未完成!"; return; } else { Tubes = new WanTai.Controller.TubesController().GetTubes(SessionInfo.LiquidTypeList, fileCreatedTime, out ErrMsg, out SystemFluid); worker.ReportProgress(1, ErrMsg); while (WaitFalg) { Thread.Sleep(1000); } //onNextStepScan("NextStepScanFinished"); } } else { if ((scanResult = controller.CallScanScript())) { // Complement = 1, // PositiveControl = 2, // NegativeControl = 3 //call scan method Tubes = new WanTai.Controller.TubesController().GetTubes(SessionInfo.LiquidTypeList, fileCreatedTime, out ErrMsg, out SystemFluid); worker.ReportProgress(1, ErrMsg); while (WaitFalg) { Thread.Sleep(1000); } } } }; worker.ProgressChanged += delegate(object s, ProgressChangedEventArgs args) { dg_Bules.ItemsSource = Tubes.DefaultView; //if (args.UserState.ToString() == "success") // dg_Bules.ItemsSource = Tubes.DefaultView; //else dg_Bules.ItemsSource = (Tubes = new DataTable()).DefaultView; WaitFalg = false; }; worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args) { loadFrom.Close(); btn_scan.IsEnabled = true; if (!scanResult) { MessageBox.Show("execute scan error", "系统提示"); return; } if (SystemFluid.IndexOf("2,") > 0 || SystemFluid.IndexOf("3,") > 0) { MessageBox.Show("阴阳对照物必须有!", "系统提示!"); return; } if (ErrMsg != "success") { MessageBox.Show(ErrMsg, "系统提示!"); } else { btn_detail.IsEnabled = true; btn_Group.IsEnabled = true; dg_TubesGroup.Items.Clear(); RowIndex = 0; TuubesGroupName = 0; CurrentTubesPositions = ""; } }; btn_scan.IsEnabled = false; worker.RunWorkerAsync(); loadFrom.ShowDialog(); // sp_ScanLoad.Visibility = System.Windows.Visibility.Collapsed; }