1

我的申请有点问题。对于我的应用程序,我想通过 webclient.DownloadFileAsync 下载一些文件,如果用户在下载仍在运行时退出程序,我想取消该 webclient 进程并删除该文件。

我已经用下面的代码试过了,但它并不能很好地工作,因为我总是得到一个 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");
        }
4

3 回答 3

1

下载文件附有下载例程,当您尝试删除这些文件时,您会收到错误消息。您可以尝试的事情很少。

  1. 使用定时器重复检查文件句柄是否被下载例程释放,您可以在 30 秒后检查。这样,您将能够在通过下载例程释放句柄后立即删除文件。

  2. 当用户取消操作并在下次应用程序启动时删除文件时,您可以存储要删除的文件的路径/文件名。

于 2012-07-04T02:49:01.877 回答
0

我不确定这是否是一个合法的解决方案,但我设法通过使用额外的按钮取消 webclient (webclient.CancelAsync();) 并放置 File.Delete(); 来解决我的问题。在将在 DownloadFileCompleted 事件中触发的 if(e.Cancelled) 语句中。

于 2012-07-05T01:24:13.497 回答
0

您的 MultiWebClient 可能仍然在流中打开文件。Dispose 方法的真正作用是什么?我想 Dispose 方法也有可能异步执行一些工作,并且当它到达该文件时,您的流仍然处于打开状态。底线是某个地方有那个文件,而最大的嫌疑人就是那个 MultiWebClient。

于 2012-07-04T02:49:19.373 回答