注册 登录
编程论坛 VB.NET论坛

[求助]多线程问题:线程事件的处理程序只被最后一个线程执行

ahhxf2000 发布于 2010-05-14 06:46, 815 次点击
我是个新手,请各位不吝赐教。在写一个小工具的时候遇到一个问题,特请教。
工具准备用线程实现读取网页,读取网页的单独放在一个类。在读取完成后会激发一个Compled事件。
在UI窗口中截获这个事件。有关代码如下:
    Private WithEvents objCreditAssi As CreditSystemAssi
在Timer的Tick事件中创建新线程
            objCreditAssi = New CreditSystemAssi()
            objThreads(序号) = New Threading.Thread(AddressOf objCreditAssi.GetWeb)
            objThreads(序号).Start()
            ThreadsStatus(序号) = 1 '标识此线程正在执行
            CurrentThreadsCount = CurrentThreadsCount + 1‘目前正在执行的线程数
            Application.DoEvents()
在Completed事件处理程序中,将发出事件的线程序号标识为空闲
Private Shared Sub Thread_Complete(ByVal ThreadCode As String) Handles
                    ThreadsStatus(intThreadCode) = 0 '标识线程空闲
                    CurrentThreadsCount = CurrentThreadsCount - 1
                    Debug.Print("线程" & ThreadCode & "已完成")
                    objThreads(intThreadCode).Abort()
end  sub

在实际运行中,Timer会不断根据objThreads线程数组的空闲状况,分配新任务给空闲的线程。
但问题是:线程完成后,UI只响应最后一个线程的completed事件。
是不是问题出在了红字部分。
高手们有什么解决方案或者正确的方法,请不吝赐教。我是新手,最好能有容易懂的例程
1 回复
#2
tance1232010-05-19 16:16
那么复杂?看不懂学习学习
1