程序正在执行一个循环,那样的话程序就会卡死,不能进行其他操作(比如说按按钮),怎么样才能让程序执行循环也不会卡死呢?
还有一个问题就是:怎么让VB.NET程序实现多线程执行任务?
线程我会了可是不行啊,线程执行不了我的操作,说不能操作window消息
追答好像很少能看到说不能操作window消息的提示,但是百度上最近好像询问类似的问题多了,实际上要么是低级错误如主程序或子程序没写完(End Sub)就嵌入了其他的子程序或直接用vb程序而不是vb.net,要么是高级错误,如使用API进行了相关操作,一般可以自己解决。
BackgroundWorker出错一般提示是不能跨线程操作。如果使用很多个线程,可以相应使用多个BackgroundWorker,如BackgroundWorker1、BackgroundWorker2,甚至可以动态生成多个BackgroundWorker控件,如果想向BackgroundWorker内传入很多值,用Object和e.Argument传值,自己网上查找“RunWorkerAsync参数问题”,实际上BackgroundWorker不能真正时时向外传递数据,除非你使用委托,关于动态生成多个控件、跨线程委托在我的空间的文章中有,具体到多个BackgroundWorker间的时时传值我没做过,实际上可以在内存中建立RamDisk盘,在上面建一个数据共享文件,哪怕是文本文件也行。所有的BackgroundWorker可能的问题就这些,其他的就超出了我的能力范围
呵呵,问题解决了!回答我这一个问题,回答完我就采纳你了!
dim k
Sub ssss()
Dim I As Integer
For I = 1 to 5 Step 0
k=k+1
Next
End Sub
Dim t1 As New Threading.Thread(AddressOf ssss)
t1.Start()
其实用这几行的代码就可以实现多线程,为什么VB.NET还要专门弄个控件出来呢?控件的功能更大么?
通常使用VB.NET的在我看来可分从VB、 VB6、 C转过来使用VB.NET和一开始就学VB.NET的,写出的程序方式差距很大,在VB.NET标准教程中只有BackgroundWorker,没有 New Threading.Thread(AddressOf ssss),好像是VB原本没有多线程的设置,在仿C的多线程时,可以使用Threading.Thread(AddressOf ssss)进行一个单独线程运算从而实现多线程,但也就是让cpu暂停极短的时间让其中一个单独线程运算,依次进行,据说由于不是原生的多线程方式,在cpu满负荷运行的时候有较高的出错率而且cpu的效率偏低,由于VB.NET继承了很多VB的东西,所以还允许Threading.Thread(AddressOf ssss)的存在,但VB.NET也有自己的更安全、更可靠、更高效的多线程方式
不行啊,线程执行不了我的操作,说不能操作window消息
追答你是在后台线程执行循环的吗?那不会卡吧
要想好好地掌握还是到MSDN看看吧
针对Visual Basic的 多线程处理 (Visual Basic) http://msdn.microsoft.com/zh-cn/library/eed6swsx(VS.90).aspx
.Net线程处理http://msdn.microsoft.com/zh-cn/library/3e8s7xdd.aspx