Ejemplo n.º 1
0
        /// <summary>
        /// 开始扫描
        /// </summary>
        public void StartScan()
        {
            logger.Debug("开始扫描 :" + DateTime.Now);
            if (!initFlag)
            {
                InitDataSrcList();
                configFlag = false;
            }

            bool initSuccessFlag = true;

            try
            {
                //检查控件是否加载了消息处理函数
                if (!msgfilter)
                {
                    msgfilter = true;
                    ComponentDispatcher.ThreadFilterMessage
                        += new ThreadMessageEventHandler(MessageFilter);
                    messageLogger.Debug("加载消息处理函数。");
                }

                //读取用户在下列列表中所选择的扫描仪名称
                string scannerName = GetSelectedScannerName();
                if (scannerName == null)
                {
                    MessageBox.Show("在进行扫描前请先选定扫描仪");
                    initSuccessFlag = false;
                    return;
                }

                //检查用户选择的扫描仪是否在DSM的管理数据源之中
                if (!twSession.SelectAsCurrentDS(scannerName))
                {
                    MessageBox.Show("TWAIN没有成功管理用户选择的扫描仪");
                    initSuccessFlag = false;
                    return;
                }

                //扫描仪使能前的准备工作
                string info = null;
                bool   flag = UISelected.IsChecked == true ? false : true;

                if (!twSession.PrepareDS(out info, !configFlag))
                {
                    string str = "扫描仪启动失败:";
                    if (info != null)
                    {
                        str += info;
                    }
                    initSuccessFlag = false;
                    MessageBox.Show(str);
                    return;
                }
                configFlag = true;

                //根据应用程序设置配置扫描仪
                AppConfiguration();

                //使能扫描仪,关闭扫描仪自带的参数配置界面
                info = null;
                if (!twSession.EnableDS(out info, false)) //这里设置扫描仪进入使能状态,开始进行扫描,只补充了注释,wk,2018-9-3
                {
                    string str = "扫描仪进入使能状态失败";
                    if (info != null)
                    {
                        str = info;
                    }
                    initSuccessFlag = false;
                    MessageBox.Show(str);
                    return;
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("扫描仪启动扫描过程失败,详细信息请查看日志");
                logger.Error("扫描仪启动扫描过程失败,异常信息: " + exp.Message);
            }
            //资源清理
            finally
            {
                //如果初始化失败,则关闭DS,删除消息处理函数
                if (!initSuccessFlag)
                {
                    twSession.DisableDS();
                    EndingScan();
                }
            }

            logger.Debug("扫描结束:" + DateTime.Now);
        }