手持机如何连续按住扫描键扫描?

1. 定义线程变量和委托方法(供子线程反调主线程使用)

private Thread scanThread;

private delegate void invokeSetScanedData(string data);

private delegate void invokeSetScanedData2(barCodeInfoBean bean);

2.  扫描键按下去方法:

private void ClInTaskDetail_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyValue == 238)

{

//开始线程 连续扫描条码

if (scanThread == null)

{

scanThread = new Thread(new ThreadStart(ScanBarCode));

scanThread.IsBackground = true;

scanThread.Start();

}

}

}

private void ScanBarCode() {

while (1>0)

{

string strBarcode = string.Empty;

if (CLR_Barcode_1D.Scan(out strBarcode))

{

CommonHelper.PlaySound();

ScanedBarcodeType barcodeType = CommonHelper.GetScanedBarcodeType(strBarcode);

switch (barcodeType)

{

case ScanedBarcodeType.MaterialCode:

if (this.txtErpNo.InvokeRequired) {

Invoke(new invokeSetScanedData(SetMaterialScanedData), new Object[] { strBarcode.Trim() });

}

//this.txtErpNo.Text = strBarcode.Trim();

//this.txtErpNo.Focus();

break;

case ScanedBarcodeType.BoxCode:

if (this.txtBoxID.InvokeRequired)

{

Invoke(new invokeSetScanedData(SetBoxScanedData), new Object[] { strBarcode.Trim() });

}

//this.txtBoxID.Text = strBarcode.Trim();

//this.txtBoxID.Focus();

break;

case ScanedBarcodeType.BatchCode:

if (this.txtBatchID.InvokeRequired)

{

Invoke(new invokeSetScanedData(SetBatchScanedData), new Object[] { strBarcode.Trim() });

}

//this.txtBatchID.Text = strBarcode.Trim();

//this.txtBatchID.Focus();

//this.GetLeftCnt(txtErpNo.Text.Trim(), txtBatchID.Text.Trim()); //20160115 fix 带不出数量问题

break;

case ScanedBarcodeType.BarcodeBinding:

//barCodeInfoBean bean = new BarcodeBindingBLL().GetBarcodeBindingInfo(strBarcode.Trim());

//if (!string.IsNullOrEmpty(bean.erpno) && !string.IsNullOrEmpty(bean.batchId))

//{

//    //this.txtErpNo.Text = bean.erpno;

//    //this.txtBatchID.Text = bean.batchId;

//    //this.txtBoxID.Focus();

//    if (this.txtErpNo.InvokeRequired && this.txtBatchID.InvokeRequired) {

//        Invoke(new invokeSetScanedData2(SetBarcodeBindingScanedData), new Object[] { bean });

//    }

//}

//else

//{

//    this.scanThread.Abort();

//    this.scanThread = null;

//    MessageBox.Show("您扫描的条码下面没有物料和批次信息,请检查!", "警告");

//}

if (this.txtErpNo.InvokeRequired && this.txtBatchID.InvokeRequired) {

Invoke(new invokeSetScanedData(SetBarcodeBindingScanedData2), new Object[] { strBarcode.Trim() });

}

break;

default:

this.scanThread.Abort();

this.scanThread = null;

MessageBox.Show("条码长度不符合条件,请检查!", "警告");

break;

}

}

Thread.Sleep(300);

}

}

3. 扫描按键抬起,则中断连续扫描线程

private void ClInTaskDetail_KeyUp(object sender, KeyEventArgs e)

{

if (e.KeyValue == 238)

{

//扫描黄键抬起,则结束连续扫描

this.scanThread.Abort();

this.scanThread = null;

}

}

4. 如何在连续扫描线程中调用主线程的方法:

4.1 先用this.Control.InvokeRequired判断

4.2 再用Invoke调用委托方法,记住WebSerive也必须写在委托方法里面去。

private void SetMaterialScanedData(string data)

{

this.txtErpNo.Text = data;

this.txtErpNo.Focus();

}

private void SetBatchScanedData(string data)

{

this.txtBatchID.Text = data;

this.txtBatchID.Focus();

this.GetLeftCnt(txtErpNo.Text.Trim(), txtBatchID.Text.Trim()); //20160115 fix 带不出数量问题

}

private void SetBoxScanedData(string data)

{

this.txtBoxID.Text = data;

this.txtBoxID.Focus();

}

private void SetBarcodeBindingScanedData(barCodeInfoBean bean)

{

this.txtErpNo.Text = bean.erpno;

this.txtBatchID.Text = bean.batchId;

this.txtBoxID.Focus();

}

private void SetBarcodeBindingScanedData2(string data)

{

//注意:连续扫描开了新线程,如果该线程中还想调用WebService去获得条码绑定信息,就用把调用WebService的代码也放入Invoke中

barCodeInfoBean bean = new BarcodeBindingBLL().GetBarcodeBindingInfo(data);

if (!string.IsNullOrEmpty(bean.erpno) && !string.IsNullOrEmpty(bean.batchId))

{

this.txtErpNo.Text = bean.erpno;

this.txtBatchID.Text = bean.batchId;

this.txtBoxID.Focus();

}

}

时间: 2024-10-11 00:59:17

手持机如何连续按住扫描键扫描?的相关文章

手持机在服装仓储管理中的应用

手持机,又被称之为手持终端.PDA.数据采集器,是通过扫描一维码.二维码来采集信息的机器.它有操作系统,CPU,具备数据存储能力,有WIFI.蓝牙.4G这些通讯方式,可以支持二次开发,具备一定的防护等级,可以移动使用,具有便携性.稳定性这些特点.手持机的生产厂家有很多,选择品牌主要关注机器的配置,如扫描头.CPU.操作系统等,另外还要关注售后服务.东大集成AUTOID9U是一款专为远距及多标签读取应用设计的手持机,专注UHF读取,采用高性能Impinj R2000芯片.每秒可读取200张次以上标

基于PDA手持机终端(自带WINCE6.0)的UHF RFID识别

最近 刚去实习.莫名其妙接触了一些设备的开发.被公司妹子拉过去帮忙的.好奇怪把 居然会有妹子=_= .. 一开始 觉得PDA(条码扫描枪)这东西好牛啊 各种崇拜 还问了嵌入的同学= = 结果人家没接触过也帮忙瞎忙活了一阵子.发现没有想象中那么卵难. 瞎扯蛋疼,还是进入正题. 首先 这款PDA手持机自带了WINCE6.0 和 Android2.3 的系统.其中WINCE6.0集成了一个精简的.NET FRAMEWORK3.5框架..然并卵 还是有很多特性不可以用.但是至少可以C# 跟 C/C++混

手持机设备在超市零售门店的应用管理

物联宇手持机应用于零售门店,实现了订货管理.收货确认.退货.商品盘点.商品查询.会员管理.货位管理等多个环节的信息化,不仅降低了门店的管理成本,提高了工作效率,还可实时掌握价格及库存情况,为领导决策提供支撑.收银员采用移动手持机扫描商品条形码即可完成销售录入工作,并通过蓝牙连接便携式打印机打印收银小票,通过扫描顾客购物卡或直接收现,既完成收银工作,能有效缓解客流高峰期客户排队造成的收银台压力,加快收银速度,提升客户满意度.传统的收货操作非常复杂,在供货商送货后,收货人员要将收货单输入电脑,商品也

在生产仓库管理中,手持机有什么作用?

手持机在生产仓库管理中的作用通过合理规划生产仓库的区域及货架,达成对库存产品的收发.盘点.以及位置信息的准确定位,以帮助企业领导层对仓储.物流精准快速决策,为企业节省人力及硬件成本.1.建立精细化货位管理规范业务流程,精细化的货位管理可提高库存准确度及拣货效率.降低库存损失:2.无线实时采集数据手工录入收发货信息必然存在实际发货与录入系统的时间差,且人工操作容易出错,因此手工录单是仓库管理中导致库存不准的主要的原因之一,利用手持机进行实时条码数据采集,是将库存准确度大幅提高的重要手段:3.提高仓

抓取扫描枪扫描数据的案例

背景: 最近要做一个抓取扫描枪扫描条形码获取条形码数据的功能,以前没有玩过扫描枪,但是因为做过很多其他方面的外设获取数据的项目,所以原理也明白,都是相当于键盘输入,所以相当的是通过获取键盘输入的方案实现,因为这个功能点是用于整个pc上所有扫描枪程序的数据的抓取,就是其他程序用扫描枪,我做的这个程序也能抓取到数据,并对数据进行相应的处理,至于数据处理那是后面自己所做的业务需求的处理了,和抓取扫描枪扫描数据无关了,所以可以通过全局键盘钩子抓取键盘的输入去实现,这样能够去获取每个键盘输入的值,想法有了

Q键连发。按住Q键则连发。松开则停止1。

Q键连发.按住Q键则连发.松开则停止1.  1楼. 检测 按键按下,则允许某一段后台程序开始执行. 2楼. 获得后台输入窗口的 Hwnd. 子窗口要取子窗口的Hwnd.DX软件绘图的窗口,要用DX按键模式. . 用API函数, ret = GetAsyncKeyState(81)来检测. 可以这样简单理解, ret 小于 -1,则为按住. ret 大于 -1,则不是按住. . 检测到Q键按下,则循环开关=1,允许某一段后台程序开始执行. 检测到Q键弹起,循环开关=0,结束某一段后台程序的执行.

iOS 按住Home键的代理

1.按住home键怎么保存程序的运行状态: 监听按home键的时候程序挂起的状态(通知),然后让其重新进入程序[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:)name:UIApplicationWillResignActiveNotification object:nil]; 2.当程序运行时 按下home键 iOS会调用哪个代理: .-

Android黑屏死机--充电运行土豆视频【.4.4】》播放视频中黑屏死机》手动按电源键开机显示电量为6%

[测试版本] T0405 [测试模块] [测试步骤] 充电运行土豆视频[.4.4]> [测试结果]播放视频中黑屏死机>手动按电源键开机显示电量为6%[开机后恢复] [预期结果]可正常播放 分析: 从测试提供的描述突然黑屏死机,并且是在电量低的情况,也有可能是直接掉电了,下面就来分析下log 从第二份last_kmsg LOG 中可以明显的看到: [ 206.423069]<0>.(0)[160:kpoc_charger]******** MT auxadc driver shutd

wpf Listbox 实现按住ctrl键来取消选中

1. 首先继承一个listbox,来获得按住ctrl键时,点击的item public class ListBoxEx : ListBox { public BeatTemplateWave GetAnitem() { var obj = this.AnchorItem; if (obj != null) { Type type = obj.GetType(); System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Ite