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-eventで発生するif(e.Cancelled)-ステートメント内。

于 2012-07-05T01:24:13.497 に答える
0

MultiWebClientは、おそらくまだファイルをストリームで開いています。そのDisposeメソッドは実際に何をしますか?Disposeメソッドが非同期でいくつかの作業を実行し、そのファイルに到達したときにストリームがまだ開いている可能性もあると思います。一番下の行はどこかにそのファイルがあるものであり、そこにある大きな疑いはそのMultiWebClientです。

于 2012-07-04T02:49:19.373 に答える