VB.NET多线程 - 事件不启动



我已经有了此代码,假设我正在迭代100多个项目。我第一次迭代列表时,距离测试事件发射了100次。太好了,这很容易。

现在是令人讨厌的未知错误当前会给我头痛,如果它也给我一个例外,那么我可能会更容易地弄清楚什么问题。

在这里是:第二次我在列表上迭代,每次,代理事件发射了99次。我的1次迭代发生了什么?

p.s。 对于我的项目,任务吞吐量比产卵说的500个我自己的线程要慢得多,因此,由于这个原因,我不想使用它们。只是在不可避免的建议之前说。它看起来可能不太漂亮,但是与创建任务列表并将其传递到任务相比,它的运行非常快。

P.S.S。 另外,在使用同时收集的建议之前,此处也需要使用数据表,因为我还在该项目中使用sqlitedataadapter.update,该项目仅采用数据词或数组。

Dim counter as integer = 0
For i = 0 To ThreadCount - 1
            Dim t As New Thread(Sub()
                                Do
                                    Dim item As DataRow = Nothing
                                    Dim req As HttpWebRequest = Nothing
                                    SyncLock lock
                                        If counter > Proxies.Rows.Count Then
                                            Exit Do
                                        End If
                                        item = Proxies(counter)
                                        Interlocked.Increment(counter)
                                        Dim judge As DataRow = validJudges(rnd.Next(0, validJudges.Count))
                                        Dim proxy As String = item("ip") & ":" & item("port")
                                        req = HttpWebRequest.Create(judge("url"))
                                        req.Proxy = New WebProxy(proxy)
                                        req.Timeout = Timeout
                                        Debug.WriteLine(counter)
                                    End SyncLock
                                    Dim statusText As String = ProxyTest.GetStatus(req, "<title>AZ Environment variables 1.04</title>", externalIp)
                                    SyncLock lock
                                        item("statusText") = statusText
                                        If statusText = "Valid" Then
                                            Interlocked.Increment(ValidCount)
                                        Else
                                            Interlocked.Increment(InvalidCount)
                                        End If
                                        Interlocked.Increment(CompletedCount)
                                        RaiseEvent ProxyTested(item)
                                    End SyncLock
                                Loop
                                mre.Set()
                            End Sub)
            t.Start()
        Next
        mre.Reset()
        mre.WaitOne()

每次我称此方法解决我的问题时,请重新初始化我的手动Resetevent :)

mre = new ManualResetevent(false(

以前MRE是一个全局,仅在加载过程中一次初始化一次。

最新更新