2008-11-30 4 views
0

J'ai une question sur les meilleures pratiques. Quel est le meilleur moment pour envoyer un rappel à l'interface utilisateur en utilisant une méthode de chargement d'aide comme les deux ci-dessous? Button1 utilise le Dispatcher lorsqu'il est renvoyé et Button2 permet à la classe de chargement d'aide d'encapsuler l'appel sur le Dispatcher. J'ai tendance à favoriser le Button2.Bonne pratique: Quand renvoyer à l'interface utilisateur Thread

private void Button1_Click(object sender, RoutedEventArgs e) 
{ 
    AsyncLoader.LoadAsyncWithoutDispatcher(delegate(string result) 
    { 
     this.Dispatcher.Invoke((Action)delegate { this.TextBox1.Text = result; }); 
    }); 
} 

private void Button2_Click(object sender, RoutedEventArgs e) 
{ 
    AsyncLoader.LoadAsyncWithDispatcher(this.Dispatcher, delegate(string result) 
    { 
     this.TextBox1.Text = result; 
    }); 
} 

class AsyncLoader 
{ 
    public static void LoadAsyncWithoutDispatcher(Action<string> completed) 
    { 
     var worker = new AsyncClass(); 
     worker.BeginDoWork(delegate(IAsyncResult result) 
     { 
      string returnValue = worker.EndDoWork(result); 
      completed(returnValue); 
     }, null); 
    } 

    public static void LoadAsyncWithDispatcher(Dispatcher dispatcher, Action<string> completed) 
    { 
     var worker = new AsyncClass(); 
     worker.BeginDoWork(delegate(IAsyncResult result) 
     { 
      string returnValue = worker.EndDoWork(result); 
      dispatcher.Invoke(completed, returnValue); 
     }, null); 
    } 
} 

Répondre

0

Si le code est générique et pas vraiment serré à l'infrastructure WPF, la première méthode est certainement plus générique car il ignore complètement l'utilisation d'un objet répartiteur. Si votre classe est étroitement intégrée à WPF, la deuxième méthode est une meilleure pratique car vous devez appeler la méthode à l'aide d'un Dispatcher. Dans la première méthode, il est possible de ne pas spécifier de répartiteur du tout. Ce n'est certainement pas une chose recommandée dans WPF.

Questions connexes