2012-04-11 14 views
6

estoy portar alguna costumbre .NET arroyos a WinRT. El lenguaje es C#.Cómo implementar IAsyncOperationWithProgress

¿Hay algún ejemplo de implementación de IAsyncOperationWithProgress? Desde Methods ReadAsync, WriteAsync de Windows.Storage.Streams los requiere. También se aceptan implementaciones de flujos de WinRT personalizados.

he encontrado algunos ejemplos C utilizando create_async, pero estoy tratando de hacer esto en C#, y no puedo encontrar create_async en el marco de metro.

Gracias de antemano

+0

Esos métodos * devuelven * una implementación - no tiene que implementarlos usted mismo. –

+0

Quiero portar secuencias personalizadas, como un 'Flujo de memoria aleatorio en caché de archivos'. Así que tengo que proporcionar esos métodos yo mismo. –

Respuesta

-1

para C#, que debe salir this //build talk on async programming.

Si está utilizando C++ de alto nivel, debe consultar el artículo this sobre cómo realizar operaciones asincrónicas en la PPL.

Si necesita implementar su propia operación asincrónica desde el nivel bajo de C++, debería mirar la clase WRL::AsyncBase.

+0

Gracias por los consejos, el lenguaje C# sigue: o, el video realmente despejaron algunas dudas. Acabo de encontrar con esta ayuda, la clase de ayuda AsyncInfoFactory responsable de crear AsyncOperations. –

+1

Lo siento por el -1, pero vi todo el video de 60 minutos buscando una muestra de código de IAsyncOperationWithProgress y no hubo nada más que una breve mención de la capacidad a las 58:00. –

3

Aquí es un ejemplo del uso IAsyncOperationWithProgress para mostrar el progreso de la instalación de un archivo XAP programáticamente. Soy bastante nuevo en el desarrollo de Win8, por lo que no estoy seguro de si es completamente idiomático.

Nota del Dispatcher.BeginInvoke a Marshall el progreso de nuevo al hilo de interfaz de usuario. Espero que ayude:

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; 
    } 
}