首页 > 解决方案 > 如何在c#中取消文件复制?

问题描述

我已添加以下代码来复制本地计算机中的文件。就我而言,如果用户单击取消按钮,我想使用 c# 停止文件复制进度。我的代码如下。

JS代码:

for(var i = 0; i < file.length; i++){
   var formdata = new FormData();
   formdata.append("Files", file[i]);
   var ajax = new XMLHttpRequest();
   ajax.upload.addEventListener("progress", progressHandler, false);
   ajax.addEventListener("load", completeHandler, false);
   ajax.addEventListener("error", errorHandler, false);
   ajax.addEventListener("abort", abortHandler, false);
   ajax.open("POST", "/Save");
   ajax.send(formdata);
}

C#代码:

using (FileStream stream = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
    using (Content)
    {
        Content.CopyTo(stream);
    }
}

我有取消按钮来取消文件进度。在那我已经中止了正在进行的进展。我已经尝试在 xml 中使用 abort() 来阻止请求,但它不会阻止文件复制。我怎样才能达到我的要求。

标签: javascriptc#

解决方案


您应该查看带有取消令牌的 Async 方法(链接

在保存中,您创建一个 CancellationTokenSource (链接)并将其存储在某处

然后,您的取消按钮会调用另一个端点,例如 Cancel (inspired ;) ),该端点调用您 tokenSource 上的 Cancel() 方法。(CancellationTokenSource 有一个用于 CopyToAsync 调用的 Token 属性)

问候,贝努瓦。

ps:如果您想在多个文件上拥有多个用户,您可能希望在请求中存储一些唯一的 id。

基于@greggz 和@Liam 评论进行编辑:您还应该将您的HTTP 端点移动到异步端点:)


推荐阅读