首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,多谢!

2012-03-08 
由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,谢谢!!!由于msdn165168账号不能登录,故用这

由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,谢谢!!!
由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,谢谢!!!
sp1234、fangxinggood:谢谢!!
我在TYZHDY里设了一全局变量zbjsjs += 1,当zbjsjs =5时,判断线程全部结束

VB.NET code
‘窗体F1: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim mhs As New List(Of ManualResetEvent)                    For ifd As Short = 0 To 4                        Dim mh As New ManualResetEvent(False)                        mhs.Add(mh)  ‘ ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ISTRNew))                        ThreadPool.QueueUserWorkItem(Sub(h)                                                         ISTRNew()                                                         mh.Set()                                                     End Sub)                               Next                    WaitHandle.WaitAll(mhs.ToArray)‘这句老实报错,求教是何原因                    Pdjijs() end sub Private Function ISTRNew()        Dim w1 As Integer, w2 As Integer        Dim tmp As String        Dim vvn As New XTHTHS        ISHn = ISHn + 1        tmp = "{" & ZBGH(ISHn - 1) & "}" & vbCrLf        w1 = InStr(istr.ToUpper, tmp) : w2 = InStr(w1, istr.ToUpper, "ABCDEFGHIJKLMNOPQRSTUVWSYZ{}[]")        vvn.indexnew = ISHn - 1        vvn.NAM = Mid(istr.ToUpper, w1 + Len(tmp), w2 - w1 - Len(tmp) - 1)        vvn.TYZHDY()    End Function Public Sub Pdjijs()        If hqs.maxhigh < DRAWLINZT(0).Max Then 'DRAWLINZT(0).Max * 1000            xmax = DRAWLINZT(0).Max        Else            xmax = hqs.maxhigh        End If        DRAWLINZT(0).Max = xmax        If PDTIANSHU = True Then            If hqs.minlow > DRAWLINZT(0).min Then                xmin = DRAWLINZT(0).min            Else                xmin = hqs.minlow            End If            DRAWLINZT(0).min = xmin        Else            xmin = hqs.minlow            DRAWLINZT(0).min = xmin        End If        Debug.Print(xmax & "dddddddddddddd " & xmin)        Drawstar()'绘图函数    End Sub


但出现一个问题:
  For ifd As Short = 0 To 4
  ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ISTRNew))
  Next
  Pdjijs()’里面的DRAWLINZT(0).min取不到值,(我判断是线程没有全部完成就执行Pdjijs,故我想在执行Pdjijs前加一判断线程全部结束的语句,可不会)

于是我又想到:在类模块XTHTHS里加入:
  If zbjsjs = 5 Then
  F1.Pdjijs()’里面的DRAWLINZT(0).min能到值
  End If
可又出现一个问题,Drawstar()绘制的图形显示不出来



还请各位高手看看我的问题出在哪,谢谢!!!

[解决办法]
ThreadPool.QueueUserWorkItem
执行的,都是异步的
也就是WaitHandle.WaitAll(mhs.ToArray)这句很有可能,在压入线程池的四个线程执行前就,执行
[解决办法]
Private Function ISTRNew()
Dim w1 As Integer, w2 As Integer
Dim tmp As String
Dim vvn As New XTHTHS
 
tmp = "{" & ZBGH(ISHn - 1) & "}" & vbCrLf
w1 = InStr(istr.ToUpper, tmp) : w2 = InStr(w1, istr.ToUpper, "ABCDEFGHIJKLMNOPQRSTUVWSYZ{}[]")
vvn.indexnew = ISHn - 1
vvn.NAM = Mid(istr.ToUpper, w1 + Len(tmp), w2 - w1 - Len(tmp) - 1)
vvn.TYZHDY()

ISHn += 1 放到最后,兄弟

End Function


ISHn = 6?

 确定 5次 +1 =6,初始值多少

热点排行