如何在c#中取消文件复制?

时间:2018-05-14 14:39:50

标签: javascript 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()来阻止请求,但它不会阻止文件复制。我怎样才能达到我的要求。

1 个答案:

答案 0 :(得分:0)

您应该使用Cancelation标记(link

查看Async方法

在保存中,您创建一个CancellationTokenSource(link)  并存储在某处

您的取消按钮然后调用另一个端点,如取消(灵感;)),在您的tokenSource上调用Cancel()方法。 (CancellationTokenSource具有CopyToAsync调用的Token属性)

此致 贝努瓦。

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

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