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

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

在保存中,您创建一个取消令牌源(链接( 并将其存放在某个地方

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

问候 伯努瓦。

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

根据@greggz和@Liam注释进行编辑: 您还应该将 HTTP 端点移动到异步端点:)