2012-08-28 11 views
5

In Win8, utilizzo somefile.CopyAsync (destFolder, newName) per copiare i file. Ma quando provo a cancellarlo, sembra che non funzioni. Questi due metodi sono come provo a cancellarlo:C'è un modo per cancellare StorageFile.CopyAsync()?

  1. basta usare 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; 
    

In primo metodo , il caso AsyncStatus.Cancel non viene chiamato, e nel secondo metodo, non succede nulla. C'è qualche altra cosa posso provare? Grazie!

risposta

0

Hai provato questo ...

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

Ha funzionato nella mia semplice test.

Questo codice dovrebbe funzionare così, se si desidera utilizzare i token di annullamento

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

grazie per la risposta, ma secondo metodo utilizza CancellationToken non funziona, ho messo task.AsAsyncAction(). Annulla() in segno .area di registrazione, ma l'operazione di copia ancora completa, quindi strano. – seanhc

+1

anche il primo metodo non funziona, se aggiungo 'attendi compito' a buttom. – seanhc

+0

seanhc, che ne dici di risolverlo finalmente? – sunjinbo

Problemi correlati