首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

※※※※关于多线程的有关问题~※※※※

2011-12-20 
※※※※关于多线程的问题~~~急~~~~※※※※我使用timer控件每隔300MS就去判断读卡线程是否执行完成,如果执行完成

※※※※关于多线程的问题~~~急~~~~※※※※
我使用timer控件每隔300MS就去判断读卡线程是否执行完成,如果执行完成则再次创建线程,就这样一直循环的去读卡,

现我的PC上有连接两台读卡器,我的实现方式是:使用一个线程来控制一台读卡器,所以这样会有两个线程来控制两台读卡器.

程序中,我使用ReaderSeven类与ReaderSix类去读两台读卡器上的卡,在类中利事件驱动的方式,把结果放在Form中的两个Lable上显示出来,而是Form中去创建两个线程,其代码如下(DecSnr为值为2,表示为两台读卡器;DeviceID(i):值为读卡器的ID,线程根据DeviceID来控制一台读卡器,这样不会乱):

        Private   Sub   Timer1_Tick(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Timer1.Tick
                Dim   i   As   Integer
                For   i   =   0   To   DecSnr   -   1
                        Select   Case   DeviceID(i)
                                Case   206464490
                                        '判断一个线程是否已经执行完成
                                        If   RCard7   Is   Nothing   Then
                                                '实例一个类
                                                RCard7   =   New   ReaderSeven
                                                '创建一个线程
                                                Dim   th7   As   New   Thread(New   ThreadStart(AddressOf   RCard7.ReadCard7))
                                                th7.Name   =   "ReadCardSeven "
                                                '传递参数给线程
                                                'RCard7.index   =   i
                                                RCard7.DeviceID   =   DeviceID(i)
                                                RCard7.iReaderHnd   =   iReaderHnd(i)
                                                RCard7.Thread   =   th7
                                                '启动线程


                                                th7.Start()
                                        End   If
                                Case   206462812
                                        If   RCard6   Is   Nothing   Then
                                                '实例一个类
                                                RCard6   =   New   ReaderSix
                                                '创建一个线程
                                                Dim   th6   As   New   Thread(New   ThreadStart(AddressOf   RCard6.ReadCard6))
                                                th6.Name   =   "ReadCardSix "
                                                '传递参数给线程
                                                RCard6.iReaderHnd   =   iReaderHnd(i)
                                                RCard6.DeviceID   =   DeviceID(i)
                                                RCard6.Thread   =   th6
                                                '判断线程是否活动的
                                                '启动线程
                                                th6.Start()
                                      End   If
                        End   Select
                Next
        End   Sub


现在的问题是:
        如果我只有一台读卡器,其中任意一台,在没有更改代码的情况下程序运行都是正常的,但如果我两台读卡器,同时读卡时,而在FORM上两个LABLE.TEXT的值会不断的发生变化,很不稳定。请高手们帮帮忙看看,是什么问题导致的,小弟万分感谢!本人的MSN:zjx1302@hotmail.com   QQ:123175406


        如果有时间可以加本人QQ帮忙解决,谢谢!

[解决办法]
用两个Label。
[解决办法]
是不是数据源的问题?或者是同步问题,你异步化操作试试。轮询(IAsyncResult.IsCompleted)操作状态
[解决办法]
怎么个跳动法?是位置发生跳动,还是数字变动,还是显示出现闪烁?
[解决办法]
问你一些问题...你这两个读卡器是不是独立的.两线程这间有没有数据交流.两线程是不是完全独立的?

如果是...为何不单独使用两线程轮询

热点排行