2012-04-11 12 views
6

Sto eseguendo il porting di alcuni flussi .NET personalizzati su WINRT. La lingua è C#.Come implementare IAsyncOperationWithProgress

Esiste qualche implementazione di esempio di IAsyncOperationWithProgress? Poiché i metodi ReadAsync, WriteAsync da Windows.Storage.Streams richiedono loro. Anche le implementazioni di stream WinRT personalizzati sono benvenute.

Ho trovato alcuni esempi C utilizzando create_async, ma sto cercando di farlo in C#, e non riesco a trovare create_async nel framework Metro.

Grazie in anticipo

+0

Questi metodi * restituiscono * un'implementazione - non è necessario implementarli da soli. –

+0

Desidero effettuare il porting di stream personalizzati, come un 'Random cache file di memoria casuale'. Quindi devo fornire personalmente quei metodi. –

risposta

-1

per C#, si dovrebbe verificare this //build talk on async programming.

Se si utilizza C++ di alto livello, è necessario consultare l'articolo this su come eseguire operazioni asincrone nella PPL.

Se è necessario implementare la propria operazione asincrona da C++ di basso livello, è necessario esaminare la classe WRL::AsyncBase.

+0

Grazie per i suggerimenti, linguaggio ancora C#: o, il video ha davvero chiarito alcuni dubbi. Ho appena trovato questo aiuto, la classe helper AsyncInfoFactory responsabile della creazione di AsyncOperations. –

+1

Mi dispiace per il -1, ma ho guardato l'intero video di 60 minuti alla ricerca di un campione di codice di IAsyncOperationWithProgress e non c'è stato nulla tranne una breve menzione della funzionalità alle 58:00. –

3

Ecco un esempio dell'utilizzo di IAsyncOperationWithProgress per visualizzare l'avanzamento dell'installazione di un file XAP in modo programmatico. Sono abbastanza nuovo nello sviluppo di Win8 quindi non sono sicuro che sia del tutto idiomatico.

Nota Dispatcher.BeginInvoke per eseguire il marshalling del progresso sul thread dell'interfaccia utente. Spero che sia d'aiuto:

private async void InstallApp(string name, Uri uri) 
{ 
    try 
    { 
     StatusTextBlock.Text = "Installing app"; 
     var installTask = InstallationManager.AddPackageAsync(name, uri); 

     installTask.Progress = (installResult, progress) => Dispatcher.BeginInvoke(() => 
     { 
      StatusTextBlock.Text = "Progress: " + progress; 
     }); 

     var result = await installTask; 
     StatusTextBlock.Text = "Done: " + result.InstallState.ToString(); 
    } 
    catch (Exception ex) 
    { 
     StatusTextBlock.Text = "Failed to install: " + ex.Message; 
    } 
}