簡體   English   中英

如何在 C# 中等待完成?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM