Witam, mam problem z wielowątkowością ponieważ chciałbym aby po wywołaniu funkcji startDownload() a następnie jej zakończeniu program użył kolejnej funkcji do wypakowania pobranego pliku lecz przez to, że pobieranie jest w nowym wątku to od razu po rozpoczęciu pobierania program próbuje rozpakować plik którego nie ma. I tu jest problem, próbowałem różnych metod jak zrobić aby przeczekać pobieranie i żeby dopiero po jego ukończeniu program przechodził do następnego kroku (unzip) lecz zakończyło się to fiaskiem.
Miałby ktoś może jakieś sugestie odnośnie naprawy mojego problemu?
Tak wygląda moja funkcja do pobierania pliku i aktualizowania paska postępu.
private void startDownload(string fileName, string fileLocation)
{
Thread thread = new Thread(() => {
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri("http://joshua-ferrara.com/luahelper/+"fileName"+.zip"), fileLocation);
});
thread.Start();
}
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this.BeginInvoke((MethodInvoker) delegate {
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn / totalBytes * 100;
label2.Text = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive;
progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
});
}
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
this.BeginInvoke((MethodInvoker) delegate {
label2.Text = "Completed";
});
}