#vb.net
Вопрос:
Я провел многопоточную проверку прокси-сервера, изменив открытый код. Но мне это нужно, чтобы постоянно проверять файл. Идея заключается в том, что этот файл будет часто обновляться, и проверка прокси-серверов будет всегда выполняться, проверяя прокси-серверы в обновленном файле. Затем он экспортирует прокси-серверы (все они, а не только рабочие) в файл .properties. Проблема в том, что я не могу прочитать файл, проверить прокси и экспортировать его, потому что я продолжаю получать сообщение об ошибке «файл уже используется». Кроме того, даже если он многопоточный, я чувствую, что он медленный… Мне действительно нужна помощь в этом.
Код, который я использую:
Dim proxies As New List(Of String)
Public Sub check(stateInfo As Object)
Dim proxyString As String = CType(stateInfo, String)
Dim myProxy As WebProxy
Try
myProxy = New WebProxy(proxyString)
Dim r As HttpWebRequest = WebRequest.Create("http://www.google.com/")
r.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36"
r.Timeout = 3000
r.Proxy = myProxy
Dim re As HttpWebResponse = r.GetResponse()
ListBox1.Items.Add(proxyString amp; "={""proxy"":true}")
Catch ex As Exception
ListBox1.Items.Add(proxyString amp; "={""proxy"":false}")
End Try
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Stop()
Using sr As New StreamReader("D:Arquivos PCDesktopproxytests.txt")
While Not sr.EndOfStream
proxies.Add(sr.ReadLine())
End While
End Using
Timer2.Start()
End Sub
'The problem with the timers is, it doesn't wait the task to be finished before starting the next task (timer)...
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
Timer2.Stop()
Dim threads As Integer = 100
ThreadPool.SetMaxThreads(threads, threads)
ThreadPool.SetMinThreads((threads / 2), (threads / 2))
For Each proxy In proxies
ThreadPool.QueueUserWorkItem(AddressOf check, proxy)
Next
Timer3.Start()
End Sub
Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
Timer3.Stop()
If (ListBox1.Items.Count > 0) Then
Using sw As New StreamWriter("D:Arquivos PCDesktopfile.properties")
For Each line As String In ListBox1.Items
sw.WriteLine(line)
Next
End Using
End If
Timer4.Start()
End Sub
Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
Timer4.Stop()
ListBox1.Items.Clear()
proxies.Clear()
Timer1.Start()
End Sub