While objThread(N).IsAlive
Windows.Forms.Application.DoEvents()
End While
哦,我弄错了,上面这行代码在我的程序中是有特别用义的,因为自己理解不深,所以贴了出来,不应该如此.我的用在这个地方:它显示的是一个提示框.
Public Shared Sub AutoShow(ByVal threadStart As System.Threading.ThreadStart, ByVal formType As MessageFormType)
SetDefaultFormType(formType)
DefaultForm.Show()
Dim t As New System.Threading.Thread(threadStart)
t.Name = threadStart.Method.ToString & Now.Ticks.ToString
t.Start()
While t.IsAlive
Windows.Forms.Application.DoEvents()
End While
LzmTW.ApplicationBase.WaitingForm.DefaultForm.Close()
End Su
不管我开几个线程,同时Thread.Sleep停留的时间多长,在线程执行期间,界面还是被冻结了;加了线程IsAlive的判定,但好像也没起到效果 :(,下面是我的代码,两位帮我看看问题在哪?
==========================
...
Dim N As Integer
Dim objThread(intThreadNum) As Thread
For N = 0 To intThreadNum - 1
Dim intThreadIndex As Integer, strThreadName As String
intThreadIndex = N
strThreadName = "Thread" & N
Dim objTest As clsTest
objTest = New clsTest(intThreadIndex, strThreadName, lvwLog)
While objThread(N).IsAlive
Windows.Forms.Application.DoEvents()
End While
Next
...
-----------------------------------
Imports System.Threading
Public Class clsTest
Private mThreadIndex As Integer
Private mThreadName As String
Private mLvwLog As ListView
Sub New()
mThreadIndex = 0
mThreadName = ""
End Sub
Sub New(ByVal intThreadIndex As Integer, ByVal strThreadName As String, _
ByVal objLvw As ListView)
mThreadIndex = intThreadIndex
mThreadName = strThreadName
mLvwLog = objLvw
End Sub
Public Sub Test()
Dim mi As MethodInvoker
mi = New MethodInvoker(AddressOf ToShowMsg)
mLvwLog.Invoke(mi)
End Sub
Private Sub ToShowMsg()
Dim strThread As String
strThread = Me.mThreadName
Dim strMsg As String
Dim intMax As Integer
intMax = 100
Dim i As Integer
For i = 0 To intMax - 1
strMsg = "Item " & i & "... Ok"
ToAddLvwItemOfLog(mLvwLog, strThread, strMsg)
Thread.Sleep(10)
Next
End Sub
Private Sub ToAddLvwItemOfLog(ByVal objLvw As ListView, ByVal strThread As String, ByVal strMsg As String)