应用线程后,为何数据就不可用?
本人开发一个读卡器Dll文件,其中有两个重点处理(1,直接读卡 2,管理小画面)当然此两个机能都需要对读卡器进行操作。
外界调用此Dll的方式,如果采用下述方法一的处理方式时,管理小画面的处理正常。但是解决不了调用画面关闭的问题。
方法一:
调用画面的代码
1.private testDll as dll
2.Form_load....
testDll = new dll
testDll.start ---> 连接了读卡器,等待卡片。此时内部有一个WaitForCard的处理在执行,其下的代码是执行不了的。
3.Button_Click....
testDll.Ment --> 起动管理小画面
以上的处理方式1,直接读卡 2,管理小画面都正常处理,但是因为内部的WaitForCard一直都要处于等待状态,所以,调用画面的关闭按钮处理不了。
方法二:
调用画面的代码
1.private testDll as dll
2.private thread1 as Thread
3.Form_load...
thread1 = new Thread(Addressof Sb_aa)
thread1.start
4.Sb_aa....
testDll = new dll
testDll.start ---> 连接了读卡器,等待卡片。此时内部有一个WaitForCard的处理在执行,其下的代码是执行不了的。
5.Button_Click....
testDll.Ment --> 起动管理小画面
以上的处理方式1,直接读卡 正常处理,调用画面的关闭按钮也正常处理,但是管理小画面虽然可以启动,但是处理不了读卡器。
------------------------------------------------
请各位帮助看看,应该如何来改?或者有新的思路。多谢!
[解决办法]
在你得dll里定义一个后台进程来操作应该可以
[解决办法]
WaitForCard是如何处理的,感觉这个很占用资源啊,是否处理流程有问题
[解决办法]
WaitForCard应该是你自己写的吧。等待卡片,估计你是在循环体中进行判断的吧,考虑在循环体中加一句application.DoEvents。也可以启动一个timer,在timer的事件中进行判断。
[解决办法]
线程处理中加一个timer会好一些...
我们上次的项目也遇到过这个问题,
后来加了timer解决了.
[解决办法]
读卡数据是如何返回的,表示部分是否在同一个线程内?
[解决办法]
建议: 楼主说方法一加个按钮调用CardCancel就可以,那这样解决也行啊.
看来关键就是要CardCancel,楼主看看加在哪合适吧.
主要是不知道读卡器dll是否正常的运行在多线程下,还是要测试过才行.
楼主多提供点资料,才能找到问题所在啊.
[解决办法]