У меня есть форма 1 (Form1), из которой я запускаю форму 2 с индикатором загрузки (Form2) и запускаю параллельный поток для скачивания файла (BackgroundWorker1).
При первой попытке скачать файл всегда все отлично работает, но если пытаюсь скачать файл 4 и более раза, то скачивание не происходит и параллельный поток подвисает. При этом если Form1 закрыть, а потом открыть, то все снова работает (1-ый раз по крайней мере), а потом снова висит.
Вроде и параллельный поток освобождаю и переменные форм, но проблема все-равно сохраняется...
- Код: Выделить всё
Public Class Form1
Public РазмерФайлаПК As Long
Public РазмерФайлаСервера As Long
Public Ссылка As String = "http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe"
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'узнаем размер файла на сервере
Dim req = HttpWebRequest.Create(Ссылка)
Dim resp = req.GetResponse
РазмерФайлаСервера = resp.ContentLength
req = Nothing
resp = Nothing
BackgroundWorker1.RunWorkerAsync()
Form2.Show()
Form2.Timer1.Enabled = True
End Sub
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'начинаем загрузку файла на ПК
Dim wc As New System.Net.WebClient 'Создаем событие WebClient
wc.Proxy = Nothing
wc.Credentials = CredentialCache.DefaultCredentials
wc.DownloadFile(Ссылка, "c:\1.zip")
'wc = Nothing
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Form2.Close()
Form2.Timer1.Dispose()
Form2.Dispose()
BackgroundWorker1.Dispose()
End Sub
End Class
Public Class Form2
Dim fi As FileInfo
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
'узнаем размер файла на ПК
fi = New FileInfo("c:\1.zip")
Form1.РазмерФайлаПК = fi.Length
fi = Nothing
ProgressBar1.Value = (Form1.РазмерФайлаПК * 100%) / Form1.РазмерФайлаСервера
If Form1.РазмерФайлаПК = Form1.РазмерФайлаСервера Then
Form1.BackgroundWorker1.CancelAsync()
Timer1.Enabled = False
Me.Close()
End If
End Sub
End Class