Как сделать постоянную проверку прокси-сервера

#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