[英]How do I wait for something to finish in C#?
private void Download_Click(object sender, EventArgs e)
{
label1.Text = "Downloading...";
WebClient wc = new WebClient();
string program = "Program";
string link = "https://linkhere.com";
string download = wc.DownloadString(link);
string path = "Program\\" + program + ".zip";
string patch = "Program";
Directory.CreateDirectory(patch);
wc.DownloadFile(download, path);
label1.Text = "Downloaded!";
}
我想讓 label1.Text = "Downloaded;"。 下載程序后發生。
您需要使下載異步以防止死鎖。
private async void Download_Click(object sender, EventArgs e)
{
label1.Text = "Downloading...";
WebClient wc = new WebClient();
string program = "Program";
string link = "https://linkhere.com";
string download = wc.DownloadString(link);
string path = "Program\\" + program + ".zip";
string patch = "Program";
Directory.CreateDirectory(patch);
await wc.DownloadFileAsync(download, path);
label1.Text = "Downloaded!";
}
DownloadFile 文檔說“下載資源時此方法會阻塞”,所以我不確定您的情況可能有什么不同,或者是否存在問題。
我懷疑您永遠不會看到"Downloading..."
,因為 UI 在兩個label1.Text
更新調用之間沒有更新。 在第一次.Text
更新后添加Application.DoEvents()
可能會有所幫助。
請使用任務和事件來處理這種情況。
您可以將此作為參考修改您的下載。
public static async Task Main()
{
Task task1 = new Task(() => ActionToWork1());
Task task2 = new Task(() => ActionToWork2());
task1.Start();
task2.Start();
await Task.WhenAll(task1, task2);
Console.WriteLine("All task done.");
}
private static void ActionToWork1(){
Console.WriteLine("Working on Task 1");
}
private static void ActionToWork2(){
Console.WriteLine("Working on Task 2");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.