多线程一般是不推荐用的,因为线程之间如果有共享资源的话会引起竞争,需要加锁处理;而且线程间没有时序关系,所以你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(我在调试中已经发现该问题).
针对你提出的这个问题,采用了多线程处理,利用的是BackgroundWorker也就是异步处理控件进行了处理.
代码已经经过调试通过.欢迎交流,如有问题,留下QQ或其他联系方式.
代码如下,并附程序截图.
'---------------------------------------------------
Imports?System.ComponentModel?'导入异步控件命名空间
Public?Class?Form1
Private?howmany?As?Integer?=?10
Private?AnalysisNumber(0?To?howmany?-?1)?As?BackgroundWorker
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
End?Sub
Private?Sub?creatNewBackgroundWorker()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AnalysisNumber(i)?=?New?BackgroundWorker
Next
Private?Sub?addHandle()
AddHandler?AnalysisNumber(i).DoWork,?AddressOf?AnalysisNumber_DoWork
AddHandler?AnalysisNumber(i).RunWorkerCompleted,?AddressOf?AnalysisNumber_RunWorkerCompleted
Private?Sub?startWork()
For?j?As?Integer?=?1?To?10
temp(j?-?1)?=?10?*?i?+?j
AnalysisNumber(i).RunWorkerAsync(temp)
Private?Sub?AnalysisNumber_DoWork(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.DoWorkEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Argument,?Integer())
Dim?temp?As?Integer
For?i?As?Integer?=?0?To?data.Length?-?1
temp?=?data(i)
data(i)?=?temp?*?temp
e.Result?=?data
Private?Sub?AnalysisNumber_RunWorkerCompleted(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.RunWorkerCompletedEventArgs)
data?=?CType(e.Result,?Integer())
ListBox1.Items.Add(data(i))
End?Class
Sub Main()
Dim thr As Thread
MulParams =Pi vbTab sFile vbTab dFile vbTab 1 vbTab DelN vbTab cr vbTab cg vbTab cb vbTab IndexI
GlobalParamas(pi)=MulParams .Split(vbTab)
thr=New Thread(AddressOf MyMulThreadCaller)
thr.Start() //启动多线程进程
Application.DoEvents
End Sub
我告诉你思路,你自己去实现.
还有一种方法,叫"线程池",也就是你说的方法,稍微复杂一点:
指定一个变量,用来表示线程的数量.刚开始为0,每开一个线程+1.当一个线程完成任务退出后,这个变量-1.直到所有任务都完成后,不再产生新线程.
ListBox操作需要用Invoke.另外多线程方式并不是并行处理.
首先,你把你那些要运行很久的过程.尽量放在一个过程中.
因为线程只能是过程,不能使函数,没有返回值的.
然后,在某个事件下这样写:
**这里我假设你的那个很就的过程叫做 sub aaa()
调用如下:
Dim mythread As New System.Threading.Thread(AddressOf aaa)
mythread.Start()
***********
这样就是定义一个线程,名字叫 mythread,这个线程会运行aaa这个过程.
start 就是让线程运行.
以上就是土嘎嘎小编为大家整理的vb.net线程数量相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!