Aplikace, která spustí stahování po startu, které lze ukončit:
public partial class Form1 : Form
{
private WebClient webClient;
//pgbStatus je progresbar
public Form1()
{
InitializeComponent();
}
private void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
pgbStatus.Value = e.ProgressPercentage;
}
private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
MessageBox.Show("Stahování přerušeno.");
}
else
{
MessageBox.Show("Stahování dokončeno.\nExtrahování souborů..");
//if(Extract())Install();
}
pgbStatus.Value = pgbStatus.Minimum;
}
private void DownloadFile(string src, string dest)
{
try
{
webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgress);
webClient.DownloadFileAsync(new Uri(src), dest);
while (webClient.IsBusy) { Application.DoEvents(); }
webClient.Dispose();
webClient = null;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
if ( webClient!=null && webClient.IsBusy) webClient.CancelAsync();
}
private void Form1_Shown(object sender, EventArgs e)
{
this.Refresh();
string dest = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "VSCODE.exe");
DownloadFile(@"https://az764295.vo.msecnd.net/public/0.10.6-release/VSCodeSetup.exe", dest);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (webClient != null && webClient.IsBusy) webClient.CancelAsync();
}
}
Po spuštění začne automaticky na plochu stahovat program VisualStudioCode!
Dávám ti to sem jen pro inspiraci, program není určitě zrovna kvalitní, ani nemá kompletní ošetření chyb. Ale myslím, že funguje jak potřebuješ. Můžeš dát do vlastního vlákna - tam by asi mělo stačit i while (webClient.IsBusy){} "Application.DoEvents" jsem tam dal, aby šlo přistupovat k formuláři.