Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 无法删除文件,因为其他进程正在使用该文件_Wpf_Multithreading_File Io - Fatal编程技术网

Wpf 无法删除文件,因为其他进程正在使用该文件

Wpf 无法删除文件,因为其他进程正在使用该文件,wpf,multithreading,file-io,Wpf,Multithreading,File Io,我得到了这个例外 进程无法访问文件“myfile.zip”,因为另一进程正在使用该文件 当我试图删除一个文件时。我理解这个错误,但我不确定还有什么进程可以使用该文件 我正在通过异步方式下载该文件,但我在尝试删除它之前取消了下载,这意味着该进程应该放弃它,不是吗 以下是相关的方法。这是一个简单的文件下载程序: private void textBox1_KeyUp(object sender, KeyEventArgs e) { string downloadFile = textBox1

我得到了这个例外

进程无法访问文件“myfile.zip”,因为另一进程正在使用该文件

当我试图删除一个文件时。我理解这个错误,但我不确定还有什么进程可以使用该文件

我正在通过异步方式下载该文件,但我在尝试删除它之前取消了下载,这意味着该进程应该放弃它,不是吗

以下是相关的方法。这是一个简单的文件下载程序:

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;
        }
    }
}

下载真的取消时,您需要等待。调用_webClient.CancelAsync()时;下一个操作员在webClient取消之前立即执行


可能您需要删除CancelAsync(…)回调中的文件。

下载realy canceled时需要等待。调用_webClient.CancelAsync()时;下一个操作员在webClient取消之前立即执行


可能您需要删除CancelAsync(…)回调中的文件

,那么我如何知道它何时完成取消?我没有看到“下载已取消”的事件。我认为
CancelAsync
是同步的。编辑:无需担心。阅读说明了这一点。那么我如何知道何时取消?我没有看到“下载已取消”的事件。我认为
CancelAsync
是同步的。编辑:无需担心。阅读解释了这一点。