在 Win8 中,我使用 somefile.CopyAsync(destFolder, newName) 来复制文件。但是当我尝试取消它时,它似乎不起作用。 这两种方法是我尝试取消它的方式:
只需使用 IAsyncOperation.Cancel
var op = somefile.CopyAsync(destFoder, newName); op.Cancel(); op.Complete = (x,y) => { switch(y) { case AsyncStatus.Complete: Debug.WriteLine("Completed" + x.GetResults().Name); break; case AsyncStatus.Cancel: Debug.WriteLine("Canceled") break; } }
使用 AsTask(CancellationToken)
var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(1)); var op = somefile.CopyAsync(destFolder, newName).AsTask(cts.Token); await op;
在第一种方法中,没有调用 AsyncStatus.Cancel 的情况,在第二种方法中,也没有任何反应。还有其他方法可以尝试吗?谢谢!
最佳答案
你试过这个吗...
var task = file.CopyAsync(KnownFolders.DocumentsLibrary, "test").AsTask();
task.AsAsyncAction().Cancel();
它在我的简单测试中有效。
如果您想使用取消 token ,此代码也应该有效
var source = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
var token = source.Token;
token.Register(() => { Debug.WriteLine("Your cancellation code here"); });
var task = file.CopyAsync(KnownFolders.DocumentsLibrary, "test").AsTask(token);
关于c# - 有没有办法取消 StorageFile.CopyAsync()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154397/