Exemplo n.º 1
0
        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;
             ****************************************************************************************************/
        }
Exemplo n.º 2
0
        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;
        }