2011-06-20 9 views
7

Tengo una aplicación de prisma 4 que usa un programa de arranque MEF. Implementé una pantalla de bienvenida desde el programa de arranque y quiero proporcionar al usuario la información del módulo (a medida que se cargan) mientras el administrador de módulos carga la aplicación/módulos.Prisma 4 Pantalla de inicio con el programa de arranque MEF

Creo que necesito suscribirme al evento LoadModuleCompleted en el administrador de módulos. No puedo hacer esto porque cuando resuelvo el administrador de módulos con el contenedor en el arrancador de MEF, el marco PRISM llama a OnImportsSatisfied, que carga todos los módulos. (Esto es demasiado tarde ya que quiero escuchar esto).

¿Cómo puedo visualizar una ventana emergente con una barra de progreso que muestra información/progreso del módulo?

¡Muchas gracias!

+0

Se puede extraer de [este proyecto ] (http://prismsplashscreen.codeplex.com). Utiliza un bootstrapper de Unity, pero puede que le resulte útil. –

Respuesta

0

Si controlas las piezas compuestas que se importan en su proyecto, puede implementar IPartImportsSatisfiedNotification en todos y hacer que informan de su propio progreso en cierta importada clase monitor de progreso:

public interface IProgressMonitor 
{ 
    void ReportComposed(Type type); 
} 

[Export(typeof(IProgressMonitor))] 
public class ProgressMonitor : IProgressMonitor 
{ 
    public ProgressMonitor() 
    { 
     var loadHeuristic = this.GetPreviousLoadProgress(); 
     if (loadHeuristic == null) 
     { 
      // Never been loaded before, so it's unclear how long it will take 
      // Set indeterminate progress bar. 
     } 
     else 
     { 
      // Use previous load times to estimate progress. 
      _loadHeuristic = loadHeuristic; 
      _progress = 0; 
     } 
    } 

    public void ReportComposed(Type type) 
    { 
     if (_loadHeuristic != null) 
     { 
      this.IncrementProgress(); 
     } 
    } 
} 

[Export] 
public class FooExport : IPartImportsSatisfiedNotification 
{ 
    [Import] 
    internal IProgressMonitor ProgressMonitor { get; set; } 

    public void OnImportsSatisfied() 
    { 
     this.ProgressMonitor.ReportComposed(typeof(FooExport)); 
    } 
} 
Cuestiones relacionadas