我的申请有点问题。在我的应用程序中,我想通过webclient.DownloadFileAsync下载一些文件,如果用户在下载仍在运行时退出程序,我想取消该webclient-process&也删除该文件。
我已经尝试使用以下代码,但它不能正常工作,因为我总是得到IOException(其他进程正在使用的文件)。
for (z = 0; z < CheckedCount; z++)
{
MultiWebclient[z].CancelAsync();
MultiWebclient[z].Dispose();
dgvDownloads.Rows[z].Cells[5].Value = "Canceled";
File.Delete(selectedFolder + _downloadRowNameList[z] + ".mp4");
}
答案 0 :(得分:1)
下载例程附带下载文件,当您尝试删除这些文件时,会出现错误。你可以尝试一些事情。
使用计时器重复检查下载例程是否释放文件句柄,您可以在30秒后检查。这样,只要通过下载例程释放句柄,就可以删除文件。
当用户取消操作并在下次应用程序启动时删除文件时,您可以存储要删除的文件的路径/文件名。
答案 1 :(得分:0)
您的MultiWebClient可能仍然在流中打开文件。 Dispose方法真正做了什么? 我想Dispose方法也可以异步地进行一些工作,当你的流到达那个文件时你的流仍然是打开的。 底线是某个地方有这个文件的东西,而且最大的怀疑就是MultiWebClient。
答案 2 :(得分:0)
我不确定这是否是一个合法的解决方案,但我设法通过使用额外的按钮取消webclient(webclient.CancelAsync();)并放置File.Delete()来解决我的问题;在一个if(e.Cancelled)语句中,将在DownloadFileCompleted事件中触发。