DownloadFileCompleted 事件不会显示简单的 MessageBox
DownloadFileCompleted Event won't show simple MessageBox
我正在尝试实现WebClient.DownloadFileCompleted事件,主要是在下载被取消的情况下删除文件。
DownloadFileCompleted 事件:
private void _web_client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
//Delete the file in here
MessageBox.Show("Download cancelled!"); // Doesn't work
File.WriteAllText("output.txt", "Test string"); //Works
throw new Exception("Some Exception"); //Program doesn't crash
}
else
{
MessageBox.Show("Download succeeded!"); // Works
}
}
FormClosing 事件:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_web_client.CancelAsync();
}
因此,如果我让下载完成,就会显示 "Success MessageBox"。但是,如果我在下载时关闭应用程序,则不会显示 MessageBox 并且程序也不会崩溃,尽管我抛出了一个未处理的异常。另一方面,创建文本文件并填充测试字符串。
那么为什么这不起作用?我应该如何处理 File.Delete 调用可能抛出的异常?
(注意我用的是WebClient.DownloadFileAsync)
提前致谢!
MessageBox.Show
无效,因为本应是 MessageBox 所有者的表单已被处置。如果您将 Show
方法的 owner
参数设置为表单的当前实例,您将得到一个 System.ObjectDisposedException
。现在,你可以做的是:
private void _web_client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
//Delete the file in here
MessageBox.Show("Download cancelled!");
File.Delete(@"path\to\partially\downloaded\file");
this.Close();
}
else
{
MessageBox.Show("Download succeeded!"); // Works
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_web_client.IsBusy)
{
e.Cancel = true;
this._web_client.CancelAsync();
}
}
我正在尝试实现WebClient.DownloadFileCompleted事件,主要是在下载被取消的情况下删除文件。
DownloadFileCompleted 事件:
private void _web_client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
//Delete the file in here
MessageBox.Show("Download cancelled!"); // Doesn't work
File.WriteAllText("output.txt", "Test string"); //Works
throw new Exception("Some Exception"); //Program doesn't crash
}
else
{
MessageBox.Show("Download succeeded!"); // Works
}
}
FormClosing 事件:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_web_client.CancelAsync();
}
因此,如果我让下载完成,就会显示 "Success MessageBox"。但是,如果我在下载时关闭应用程序,则不会显示 MessageBox 并且程序也不会崩溃,尽管我抛出了一个未处理的异常。另一方面,创建文本文件并填充测试字符串。
那么为什么这不起作用?我应该如何处理 File.Delete 调用可能抛出的异常?
(注意我用的是WebClient.DownloadFileAsync)
提前致谢!
MessageBox.Show
无效,因为本应是 MessageBox 所有者的表单已被处置。如果您将 Show
方法的 owner
参数设置为表单的当前实例,您将得到一个 System.ObjectDisposedException
。现在,你可以做的是:
private void _web_client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
//Delete the file in here
MessageBox.Show("Download cancelled!");
File.Delete(@"path\to\partially\downloaded\file");
this.Close();
}
else
{
MessageBox.Show("Download succeeded!"); // Works
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_web_client.IsBusy)
{
e.Cancel = true;
this._web_client.CancelAsync();
}
}