我是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,以秒为单位)。
答案 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声明移到方法之外,并使其在课程级别