如何从第二个函数访问一个函数中声明的变量?

时间:2012-07-15 20:45:06

标签: c# private-members downloadfileasync

我是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,以秒为单位)。

3 个答案:

答案 0 :(得分:5)

这不是私人变量。 webClient超出了范围。你必须使它成为该类的成员变量。

class SomeClass {
    WebClient webClient = new WebClient();

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

答案 1 :(得分:1)

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

表格MSDN:Scopes

  

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

  

class-member-declaration声明的成员范围是声明发生的类主体。

这样

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();
    }

}

答案 2 :(得分:0)

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

因此你不能在button2_Click方法

中使用它

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

要重新启用此功能,请将webClient声明移到方法之外,并使其在课程级别