2012-08-28 26 views
5

En Win8, utilizo somefile.CopyAsync (destFolder, newName) para copiar archivos. Pero cuando intento cancelarlo, parece que no funciona. Estos dos métodos son cómo intento para cancelarlo:¿Hay alguna manera de cancelar StorageFile.CopyAsync()?

  1. sólo tiene que utilizar 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. uso AsTask (CancellationToken)

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

En primer método , caso AsyncStatus.Cancel no se llama, y ​​en el segundo método, no pasa nada. ¿Hay alguna otra ¿Cómo puedo intentarlo? ¡Gracias!

Respuesta

0

Has probado esto ...

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

Se trabajó en mi prueba sencilla.

Este código debe funcionar bien si desea utilizar fichas de cancelación

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); 
+0

Gracias por la respuesta, pero segundo método usando CancellationToken no funciona, puse task.AsAsyncAction(). Cancelar() en señal .register area, pero la operación de copia aún se completa, es raro. – seanhc

+1

el primer método tampoco funciona, si agrego 'await task' al botón. – seanhc

+0

seanhc, ¿qué tal si finalmente lo resuelves? – sunjinbo

Cuestiones relacionadas