5

Win8では、somefile.CopyAsync(destFolder、newName)を使用してファイルをコピーします。しかし、キャンセルしようとすると、うまくいかないようです。これらの2つの方法は、私がそれをキャンセルしようとする方法です。

  1. 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;
        }
    }
    
  2. AsTask(CancellationToken)を使用する

    var cts = new CancellationTokenSource();
    cts.CancelAfter(TimeSpan.FromSeconds(1));
    var op = somefile.CopyAsync(destFolder, newName).AsTask(cts.Token);
    await op;
    

最初の方法では、ケースAsyncStatus.Cancelは呼び出されず、2番目の方法では、何も起こりません。他に試すことができる方法はありますか?ありがとう!

4

1 に答える 1

0

これを試しましたか...

var task = file.CopyAsync(KnownFolders.DocumentsLibrary, "test").AsTask();
task.AsAsyncAction().Cancel();

私の簡単なテストではうまくいきました。

キャンセル トークンを使用する場合は、このコードも機能するはずです。

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);
于 2012-08-28T12:52:57.447 に答える