所以我有一个列表框,我在那里有一个代理列表。我有4个按钮。他们找到,加载,保存和检查
我有前3个完成并正在工作,但我没有找到任何有用的检查代理,我找到的唯一一个代理每个代理6秒,所以它花了很多时间来一个体面的大小列表。
那么我怎么能做到这一点,按下那个按钮,它会检查列表框中的所有代理,它会删除慢速代码和那些扁平代码无效的代理。这样做的速度很快(所以它可能是多线程的)
由于我无法弄清楚这一点我没有与此相关的代码,除了按钮点击的子项我不觉得有必要发布代码
答案 0 :(得分:2)
我的建议是:
1)使用计时器控件并将其Tick属性设置为适当的值,如500;
2)创建一个BackGroudWorkers数组,例如BackGroudWorker [20];
3)当您的应用程序开始运行阵列中的所有BackGroudWorkers并在Timer的tick事件中检查是否有任何BackGroudWorker完成。如果已完成并且您在列表中有其他项目,则使用新Item运行它。直到所有列表项目已选中
答案 1 :(得分:2)
Public Shared Function CheckProxy(ByVal Proxy As String) As Boolean
Dim prx As Uri = Nothing
If Uri.TryCreate(Proxy, UriKind.Absolute, prx) Then
Return CheckProxy(prx)
ElseIf Uri.TryCreate("http://" & Proxy, UriKind.Absolute, prx) Then
Return CheckProxy(prx)
Else
Return False
End If
End Function
Public Shared Function CheckProxy(ByVal Proxy As Uri) As Boolean
Dim iProxy As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
iProxy.ReceiveTimeout = 500 : iProxy.SendTimeout = 500
Try
'' Connect using a timeout (1/2 second)
Dim result As IAsyncResult = iProxy.BeginConnect(Proxy.Host, Proxy.Port, Nothing, Nothing)
Dim success As Boolean = result.AsyncWaitHandle.WaitOne(500, True)
If (Not success) Then
iProxy.Close() : Return False
End If
Catch ex As Exception
Return False
End Try
Dim bytData() As Byte, strData As String
Dim iDataLen As Integer = 1024
strData = String.Format("CONNECT {0}:{1} HTTP/1.0{2}{2}", "www.google.com", 80, vbNewLine)
bytData = System.Text.ASCIIEncoding.ASCII.GetBytes(strData)
If iProxy.Connected Then
iProxy.Send(bytData, bytData.Length, SocketFlags.None)
ReDim bytData(1024)
Do
Try
iDataLen = iProxy.Receive(bytData, bytData.Length, SocketFlags.None)
Catch ex As Exception
iProxy.Close() : Return False
End Try
If iDataLen > 0 Then
strData = System.Text.ASCIIEncoding.ASCII.GetString(bytData)
Exit Do
End If
Loop
Else
Return False
End If
iProxy.Close()
Dim strAttribs() As String
strAttribs = strData.Split(" "c)
If strAttribs(1).Equals("200") Then
Return True
Else
Return False
End If
End Function
您应该管理线程等的代码,如@Nima所建议的代理检查问题我在这里有2个方法一个请求代理字符串并尝试连接它。 e.g。
ProxyStatus = CheckProxy("http://192.168.1.1:8080/")
ProxyStatus为True / False,具体取决于代理是否有效