Je suis relativement nouveau à WPF. J'examine un code qui ressemble à ceci:Question sur WPF Dispatcher.BeginInvoke appelé par le même fil! Pourquoi?
private void button_Click(object sender, RoutedEventArgs e)
{
//Queue on dispatcher in the background so it doesn't make the UI slow
Dispatcher.BeginInvoke(new dMyDelegate(PerformOperation), DispatcherPriority.Background);
}
De ce commentaire, je devine que le code original a estimé que cela était nécessaire pour rendre cependant plus sensible l'interface utilisateur, je crois comprendre que Dispatcher.BeginInvoke exécute simplement quelque chose sur le fil de l'interface utilisateur. Puisque le buttn_Click est déjà sur le thread d'interface utilisateur, quel est le point? Peut-être que je ne comprends pas Dispatcher et BeginInvoke. Je suis assumming que Dispatcher dans ce cas, est le répartiteur appartenant à la classe dans laquelle se trouve cette méthode, qui est MainWindow.xaml. Quelqu'un peut-il m'éclairer?
Merci
Ahhh. Je ne me suis pas concentré sur le deuxième paramètre. Ça a du sens. "PerformOperation" sera appelé après tous les événements prioritaires normaux. Quelque part ailleurs dans le code, ils appellent aussi BeginInvoke avec "background" et n'ont pas l'intention de laisser le GUI redessiner en premier. Savez-vous quel niveau est le redessin de l'écran? C'est si je bloque et débloque l'application avec MSWord ou minimise et maximise? Est-ce "normal" ou supérieur? Enfin, il semblerait qu'une fois que PerformOperation démarre, l'interface graphique est verrouillée? Correct? – Dave
@Andrew: Je crains de ne pas connaître les priorités ... mais oui, une fois que PerformOperation démarre, le thread du répartiteur sera verrouillé. Je crois qu'il y a un fil de rendu séparé, ce qui peut éviter d'avoir un écran vide, mais je ne connais pas grand-chose sur les détails. –
Merci! Marqué comme réponse. – Dave