关于PDA扫码效率的问题

w583193259 2011-10-27 03:15:01
我之前解决了PDA无焦点扫码的问题,现在又有新的问题了:我必须要在每一个界面上写上代码或者放一个Barcode控件来启动扫码,这样才能监控到扫码的动作,但是现在如果我同时打开2个或2个以上界面的同时,这时候PDA就会卡机。后来这个问题算是解决了,我在每一个窗体的激活和未激活的事件里面停用扫码,但是每次停用扫码设备的时候会很慢(大约要3-4秒),那我在多个窗体之间切换的同时,就很慢了,而且PDA设备还会很卡!我想请教各位大虾们,有没有什么好的办法来解决这些问题?
...全文
640 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
w583193259 2011-10-31
  • 打赏
  • 举报
回复
嗯 我试试
w583193259 2011-10-29
  • 打赏
  • 举报
回复
扫码后 根本就不会走keydown、keypress这两个事件呢!条码是扫到了 但是就是不走这个事件 那我在哪去加载这个条码呢?
w583193259 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 skylkj 的回复:]
那不就简单了?

你设置一个全局变量标识当前哪个窗体被激活,然后在每个窗体的Activated事件里更新这个变量。
然后控件的onread事件里根据这个变量决定读到的string提交给哪个窗体,比如:
switch(WhichFormActived)
{
case 1:
form1.textbox1.text=barcodeText;
break;
case 2:……
[/Quote]

嗯 感觉可行 我现在找找PDA上按键的ASCII 再试试
skylkj 2011-10-29
  • 打赏
  • 举报
回复
那不就简单了?

你设置一个全局变量标识当前哪个窗体被激活,然后在每个窗体的Activated事件里更新这个变量。
然后控件的onread事件里根据这个变量决定读到的string提交给哪个窗体,比如:
switch(WhichFormActived)
{
case 1:
form1.textbox1.text=barcodeText;
break;
case 2:
form2.textbox1.text=barcodeText;
break;

…………
}




也可以onread里只管把条码读到一个全局的string里。各个窗体监视扫码动作,检测到有扫码,就去取这个全局string(要注意下延时)
检测扫码动作其实就是检测键盘按键,把form的keypreview属性设为true,那么只要当前窗体激活,有任何按键的话就会触发keydown或者keypress(我确实遇到过按键只触发keydown不触发keypress的情况)
w583193259 2011-10-29
  • 打赏
  • 举报
回复
Barcode控件:启用是设置它的EnableScanner属性
启用的代码很简单: this.barcode1.EnableScanner = true;
关闭就是: this.barcode1.EnableScanner = false;

然后我获取扫码的信息是它的OnRead事件:
代码就是:string barcodeText = readerData.Text;
这样barcodeText就是扫码获取到的信息了。
skylkj 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 w583193259 的回复:]
不对呀 那我其他窗体在扫码的话,我怎么知道当前是那个窗体,或者说我在其他窗体获取它扫码的信息?
[/Quote]

你的barcode控件是用什么方式调用的?
一般我接触过两种,一种是作为服务运行,然后把条码作为键盘消息发给前端界面;(这种不需要编程)
一种是会提供一些主动调用方法,类似(c#举例):
bool ScanerOpen();
bool ScanClose();
string Scan();

那只要放一个控件,然后在主窗体创建的时候open,在程序退出的时候close
期间要进行任何扫描的时候都是调用scan方法。

我觉得这么说已经很清楚了,我不太清楚你的困扰在哪里,或者你把你那个barcode控件的调用方法贴出来看看
woshi_ziyu 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 w583193259 的回复:]

引用 3 楼 woshi_ziyu 的回复:
在线程中监视UI,设置一个FLAG


你的方法我感觉不行 这样子还是要判断FLAG的值来启用扫码 如果同时打开两个界面 那还是要停掉一个啊!一样的
[/Quote]
恩 不能同时操作
skylkj 2011-10-29
  • 打赏
  • 举报
回复
首先你form的preview要是true,否则只触发当前焦点所在控件(比如textbox)的keydown和keypress

然后,你也可以用我说的第一个方法

你设置一个全局变量标识当前哪个窗体被激活,然后在每个窗体的Activated事件里更新这个变量。
然后控件的onread事件里根据这个变量决定读到的string提交给哪个窗体,比如:
switch(WhichFormActived)
{
case 1:
form1.textbox1.text=barcodeText;
break;
case 2:
form2.textbox1.text=barcodeText;
break;

…………
}
w583193259 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 woshi_ziyu 的回复:]
在线程中监视UI,设置一个FLAG
[/Quote]

你的方法我感觉不行 这样子还是要判断FLAG的值来启用扫码 如果同时打开两个界面 那还是要停掉一个啊!一样的
w583193259 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 skylkj 的回复:]
最简单的方法就是放到一个form上,然后别的form都调用这个form上的这个控件

比如放在mainfrm上,其他界面调用就用mainfrm.barcode.scan()
[/Quote]

不对呀 那我其他窗体在扫码的话,我怎么知道当前是那个窗体,或者说我在其他窗体获取它扫码的信息?
w583193259 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 skylkj 的回复:]

最简单的方法就是放到一个form上,然后别的form都调用这个form上的这个控件

比如放在mainfrm上,其他界面调用就用mainfrm.barcode.scan()
[/Quote]

这样行吗?我试试啊!我刚才在弄用户控件 没弄好
skylkj 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 w583193259 的回复:]

嗯 ,我感觉你的方法可行!但这是控件啊,怎么放到公共的地方,做成用户控件?
[/Quote]

最简单的方法就是放到一个form上,然后别的form都调用这个form上的这个控件

比如放在mainfrm上,其他界面调用就用mainfrm.barcode.scan()

w583193259 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 skylkj 的回复:]
Barcode控件放到一个公共的地方,每个界面都去调用同一个Barcode控件

一般pda的扫码头都是串口连接的,独占方式,编程自然也不能放多个,否则切换肯定会很麻烦
[/Quote]
嗯 ,我感觉你的方法可行!但这是控件啊,怎么放到公共的地方,做成用户控件?
skylkj 2011-10-28
  • 打赏
  • 举报
回复
Barcode控件放到一个公共的地方,每个界面都去调用同一个Barcode控件

一般pda的扫码头都是串口连接的,独占方式,编程自然也不能放多个,否则切换肯定会很麻烦
woshi_ziyu 2011-10-27
  • 打赏
  • 举报
回复
在线程中监视UI,设置一个FLAG
w583193259 2011-10-27
  • 打赏
  • 举报
回复
但是用线程的话,具体应该怎么做呢?
QQ515311445 2011-10-27
  • 打赏
  • 举报
回复
像这种问题都是开一个线程来做,这样就不会阻塞UI线程,所以就不会感觉到卡

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧