/// <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); }