Beispiel #1
0
        private void singlePointMode_Click(object sender, RoutedEventArgs e)
        {
            Move.Stop();
            capturing = false;

            double wavenumFrom = -100, wavenumTo = 100, wavenumStep = 1;
            int    column     = (int)DataProcessing.XDataBase;
            uint   expoTime   = (uint)Ccd.ExpoTime;
            double end        = SpexPos + wavenumTo;
            double wavenumNow = SpexPos;

            Thread thread = new Thread(new ThreadStart(
                                           () =>
            {
                this.Dispatcher.Invoke((ThreadStart) delegate()
                {
                    moveAndProgress(SpexPos, SpexPos + wavenumFrom);
                });
                moveThread.Join();
                wavenumNow       += wavenumFrom;
                DataProcessing dp = new DataProcessing(true);
                Ccd.Setup(true, expoTime);
                Ccd.GetFrame(dp.DataArray);
                Ccd.Stop();
                this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                {
                    dp.GetList(SpexPos);
                    monitor.Data = new List <Point>(dp.PointArray);
                });
                while (wavenumNow < end)
                {
                    this.Dispatcher.Invoke((ThreadStart) delegate()
                    {
                        moveAndProgress(SpexPos, SpexPos + wavenumStep);
                    });
                    moveThread.Join();
                    wavenumNow += wavenumStep;
                    Ccd.Setup(true, expoTime);
                    Ccd.GetFrame(dp.DataArray);
                    Ccd.Stop();
                    this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                    {
                        dp.GetList(SpexPos);
                        dp.Append((System.Collections.Generic.List <Point>)monitor.Data);
                        monitor.RepaintLine(monitor.Data, false);
                    });
                }
            }));

            thread.Start();
        }
Beispiel #2
0
        private void autoSpex_Click(object sender, RoutedEventArgs e)
        {
            if (!acquiring)
            {
                AutoSpexWindow autoSpexWindow = new AutoSpexWindow();
                autoSpexWindow.Owner = this;
                autoSpexWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

                autoSpexWindow.ShowDialog();
                if (autoSpexWindow.DialogResult == true)
                {
                    acquiring                  = true;
                    acquire                    = true;
                    autoSpex.Content           = "停止采谱";
                    autoSpex.ToolTip           = "Stop acquiring";
                    startStopMoving.IsEnabled  = false;
                    startStopCapture.IsEnabled = false;
                    displaySettings.IsEnabled  = false;
                    hardwareSettings.IsEnabled = false;

                    Move.Stop();
                    capturing = false;

                    double waveNumFrom, waveNumTo, waveNumStep, waveNumDisInit, waveNumNow;
                    int    overlappedPixel;
                    int    expoTime;

                    waveNumFrom     = autoSpexWindow.WaveNumFrom;
                    waveNumTo       = autoSpexWindow.WaveNumTo;
                    waveNumStep     = (Ccd.ROITo - Ccd.ROIFrom) * DataProcessing.XScale - autoSpexWindow.OverlappedWaveNum;
                    overlappedPixel = (int)(autoSpexWindow.OverlappedWaveNum / monitor.XScale + 0.5);
                    waveNumDisInit  = waveNumFrom - (Ccd.ROIFrom - DataProcessing.XDataBase) * DataProcessing.XScale - SpexPos;
                    expoTime        = autoSpexWindow.ExpoTime;
                    waveNumNow      = SpexPos;

                    autoSpexThread = new Thread(new ThreadStart(
                                                    () =>
                    {
                        List <Point> data = new List <Point>();
                        if (moveThread != null)
                        {
                            moveThread.Join();
                        }
                        if (moveProgressThread != null)
                        {
                            moveProgressThread.Join();
                        }
                        if (getFrameThread != null)
                        {
                            getFrameThread.Join();
                        }

                        DataProcessing dp = new DataProcessing(true);
                        this.Dispatcher.Invoke((ThreadStart) delegate()
                        {
                            moveAndProgress(waveNumNow, waveNumNow + waveNumDisInit);
                        });
                        moveThread.Join();
                        waveNumNow += waveNumDisInit;
                        if (Ccd.Setup(true, (UInt32)expoTime) != 0)
                        {
                            Ccd.GetFrame(dp.DataArray);
                            Ccd.Stop();
                            this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                            {
                                dp.GetList(SpexPos);
                                monitor.Data = new List <Point>(dp.PointArray);
                            });
                            waveNumFrom += waveNumStep;
                            while (acquire && waveNumFrom < waveNumTo)
                            {
                                //MessageBox.Show(waveNumNow.ToString());
                                this.Dispatcher.Invoke((ThreadStart) delegate()
                                {
                                    moveAndProgress(waveNumNow, waveNumNow + waveNumStep);
                                });
                                moveThread.Join();
                                waveNumNow += waveNumStep;
                                if (Ccd.Setup(true, (UInt32)expoTime) == 0)
                                {
                                    MessageBox.Show("无法初始化sequence", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
                                    break;
                                }
                                Ccd.GetFrame(dp.DataArray);
                                Ccd.Stop();
                                this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                                {
                                    dp.GetList(SpexPos);
                                    dp.Append((System.Collections.Generic.List <Point>)monitor.Data);
                                    monitor.RepaintLine(monitor.Data, false);
                                });
                                waveNumFrom += waveNumStep;
                            }
                        }

                        this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                        {
                            MessageBox.Show(SpexPos.ToString());
                            displaySettings.IsEnabled  = true;
                            hardwareSettings.IsEnabled = true;
                            startStopCapture.IsEnabled = true;
                            startStopMoving.IsEnabled  = true;
                            autoSpex.Content           = "自动采谱";
                            autoSpex.ToolTip           = "Start acquiring";
                        });
                        acquiring = false;
                    }));
                    autoSpexThread.Start();
                }
            }
            else
            {
                acquire = false;
                Move.Stop();
            }
        }