1

この例外が発生します

別のプロセスによって使用されているため、プロセスはファイル'myfile.zip'にアクセスできません。

ファイルを削除しようとしたとき。エラーは理解できましたが、ファイルを使用している他のプロセスがわかりません。

WebClientを介してファイルを非同期でダウンロードしていますが、ファイルを削除する前にダウンロードをキャンセルします。つまり、プロセスはファイルを放棄する必要があります。

関連する方法は次のとおりです。これは単純なファイルダウンローダーです。

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    string downloadFile = textBox1.Text.Trim();
    if (e.Key == Key.Return && downloadFile != "")
    {
        var dlg = new SaveFileDialog();
        dlg.FileName = Path.GetFileName(downloadFile);
        dlg.DefaultExt = Path.GetExtension(downloadFile);
        var result = dlg.ShowDialog();
        if(result.Value)
        {
            textBox1.Text = "";
            textBox1.Focus();
            _saveFile = dlg.FileName;
            progressBar1.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => progressBar1.Foreground = new SolidColorBrush(Color.FromRgb(0, 255, 0))));
            _webClient.DownloadFileAsync(new Uri(downloadFile), _saveFile);
        }
    }
}


private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (_webClient.IsBusy && _saveFile != null)
    {
        var result = MessageBox.Show("Download in progress. Are you sure you want to exit?", "Exit?", MessageBoxButton.YesNo, MessageBoxImage.Warning);
        if (result == MessageBoxResult.Yes)
        {
            _webClient.CancelAsync();
            File.Delete(_saveFile);
        }
        else
        {
            e.Cancel = true;
        }
    }
}
4

1 に答える 1

1

ダウンロードが本当にキャンセルされるまで待つ必要があります。_webClient.CancelAsync();を呼び出すとき。次の演算子は、webClientがキャンセルされる前にすぐに実行されます。

CancelAsync(...)のコールバックでファイルを削除する必要があるかもしれません

于 2012-05-12T15:25:22.807 に答える