Conseils sur l'utilisation du Répartiteur de Priorité et de Liaison

Dans mon application que je suis en utilisant le temps d'inactivité de la thread d'INTERFACE utilisateur pour décharger des opérations coûteuses, comme décrit par Article MSDN sur le Modèle de thread WPF.

GenerateDataAction = () => { GenerateData(); };
Dispatcher.BeginInvoke(GenerateDataAction, DispatcherPriority.Render, null);

Dans le GenerateDate() méthode que j'ai accès à une base de données MSSQL, traiter les données, et mettre à jour les liaisons dans le viewmodel. J'ai remarqué depuis la mise en œuvre de ce qui certains de liaison de ne pas mettre à jour correctement ou pas du tout. J'ai vérifier la sortie pour la liaison des erreurs et a une deuxième programmeur confirmer la logique, ont également définir des points d'arrêt à l'intérieur de la propriété de dépendance changement de la méthode (les points d'arrêt ne pas se faire frapper).

Est-il meilleur-pratique des conseils sur qui DispatcherPriority (lien vers MSDN) doit être utilisée lorsque le invoquée action contient des liaisons?

  • Que-ce à dire que ce code fonctionne toujours pour certaines liaisons? Faire de certaines liaisons échouer et certains de réussir au sein de la même opération? Si vous appelez la GenerateData méthode directement, faire toutes les liaisons travail?
  • Lorsque le GenerateData est invoquée directement les liaisons fonctionnent comme prévu.
  • J'ai regardé cette page, lien sympa BTW. Leur exemple pour BeginInvoke est de nature très différente de la vôtre. Je voudrais suggérer à l'aide d'un Backgroundworker, la Tâche ou le pool de threads. Si vous modifiez uniquement la Source de Databindings vous devriez être OK.
  • Que l'article MSDN est excellent - j'ai toujours su à propos de la Dispatcher cependant pas dans le détail. ... Les opérations que j'ai ne sont pas si cher que ça pour justifier l'utilisation d'un BackgroundWorker et le single-threaded approche est idéale.
  • Dennis, un Bgw utilise un pool de thread, pas cher du tout. Je voudrais résoudre le problème de liaison de la première.
  • Toutes mes excuses, la raison et ne voulant pas utiliser un BackgroundWorker n'était pas parce que je pensais que c'était cher, je le sais, il utilise un thread du pool de travail. C'est plus l'effort de mettre en place, pour ce qui n'est pas vraiment une opération coûteuse. ... CEPENDANT, je vais essayer et voir si cela résout le problème de liaison. Je soupçonne que la liaison d'erreur est tout autre chose. Merci pour la réponse!

InformationsquelleAutor Dennis | 2011-09-19