日期:2014-05-18  浏览次数:20804 次

多线程同步时,怎么访问某个共享资源的等待队列
有一个条码扫入程序,就是通过条码枪将条码读到一个TextBox里面,在一个KeyPress事件里面根据字符是否是回车符判断输入结束.以前扫的是一维条码,但现在系统升级要扫入二维条码,也就是扫一次就会读入两条数据,两个回车.但实际上在当前界面上,只有第一个条码是有用的,而第二个条码应该在事件里面被过滤掉.
  暂时没有什么好的想法解决这个问题,我想的一个方法是:由于条码读入的速度很快,因此在第一个KeyPress事件执行的过程中,第二个KeyPress事件会由于同步的原因进入某个等待队列,我想在KeyPress事件里通过判断这个等待队列是否为空来决定处理操作.为空,则清空这个队列从而消除第二个KeyPress的触发.但是不知道怎么访问这个等待队列,也不知道即使访问到了可不可以清空它里面的数据.(由于操作的原因,两次数据读入不会造成同步)
  也有一些别的想法,如设置整型类变量,通过判断它的奇偶来确定是第一个还是第二个条码,但由于应用及其它原因,这个方法不能被使用.
  请大家帮忙解决下,有其它好的解决办法也欢迎提出.接触C#不久,请大家多多支持,给个思路或解决方向.不想贴代码的,告诉我应该看哪些类就好了.谢谢!

------解决方案--------------------
直接使用TextBox的TextChange事件,在事件中判断当前文本的长度,当长度为第一个条码的长度时就将TextBox的Enabled属性改为false,这样后面的第二个条码就不会输入到TextBox中了.
------解决方案--------------------
"现在系统升级要扫入二维条码,也就是扫一次就会读入两条数据"

"但实际上在当前界面上,只有第一个条码是有用的,而第二个条码应该在事件里面被过滤掉"

既然第二个条形码无用,要被过滤掉,为什么要所扫描进来?

如果有其他需求需要扫描进来,那么在给TEXTBOX赋值的时候就可以直接 根据 回车Split,然后只取前面第一个即可.
------解决方案--------------------
你为什么不用两个TextBox,还是用TextChange事件,第1个TextBox中发现回车符时就就将TextBox的Enabled属性改为false,同时将焦点转到下面的那个TextBox中,用两个TextBox分别接收两个条码.没有限定你只能用一个吧.
------解决方案--------------------
可以两个条码录入一个text里面,然后程序设定两条码间+&分隔,程序处理的时候作不同条码段提取即可,不止楼主意下如何?