-4

我是 C# 编程的新手,我正在寻找一个快速的解决方案。我在表单上有 2 个按钮,一个正在调用 DownloadFileAsync(),第二个应该取消此操作。第一个按钮的代码:

private void button1_Click(object sender, EventArgs e)
{
...
WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri(textBox1.Text), destination);
}

第二个按钮的代码:

private void button2_Click(object sender, EventArgs e)
{
webClient.CancelAsync(); // yes, sure, WebClient is not known here.
}

我正在寻找如何快速解决这个问题的想法(使用第一个函数中的 webClient,在第二个块中)。

4

3 回答 3

4

那不是私有变量。webClient超出范围。您必须使其成为该类的成员变量。

class SomeClass {
    WebClient webClient = new WebClient();

    private void button1_Click(object sender, EventArgs e)
    {
        ...
        webClient.DownloadFileAsync(new Uri(textBox1.Text), destination);
    }
}
于 2012-07-15T20:46:31.490 回答
1

您必须webClient在您的类中全局定义(变量范围)。webClientonbutton2_Click超出范围。

表格 MSDN:范围

在 local-variable-declaration 中声明的局部变量的范围是发生声明的块。

由 class-member-declaration 声明的成员的范围是声明所在的 class-body。

以便

class YourClass 
{
     // a member declared by a class-member-declaration
     WebClient webClient = new WebClient();

    private void button1_Click(object sender, EventArgs e)
    {
        //a local variable 
        WebClient otherWebClient = new WebClient();
        webClient.DownloadFileAsync(new Uri(textBox1.Text), destination);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        // here is out of otherWebClient scope
        // but scope of webClient not ended
        webClient.CancelAsync();
    }

}
于 2012-07-15T20:48:56.323 回答
0

webclient 在 button1_Click 方法中声明,并且在该方法的范围内可用

因此您不能在 button2_Click 方法中使用它

相反,编译器将使您的构建失败

要解决这个问题,请将 webClient 声明移到方法之外并使其在类级别可用

于 2012-07-15T20:48:42.637 回答