2012-07-16 4 views
0

Quelqu'un peut-il me dire comment le traitement dans Silverlight se déroule entre le thread UI et les autres threads "worker".Silverlight UI Thread Blocking

J'ai un scénario où je dois mettre à jour plusieurs centaines d'objets UI complexes dans la vue via un viewmodel. Chaque élément est soutenu par son propre viewmodel.

Si chaque viewmodel avait une propriété, appelée IsSelected, par exemple, qui modifiait une couleur d'arrière-plan par le biais de comportements, comment devrais-je procéder pour apporter des modifications au blocage minimal du thread d'interface utilisateur?

Si je mets à jour mes (plusieurs centaines) modèles, cela bloque le fil de l'interface utilisateur pendant environ 4 secondes. Comment puis-je déterminer ce qui bloque? Existe-t-il des moyens plus efficaces de mettre à jour?

Merci

Répondre

0

Il y a certainement des moyens plus efficaces que de le faire en une seule fois. Une solution spécifique à Silverlight consiste à espacer ces mises à jour de quelques millisecondes avec les appels différés de DispatcherTimer, de sorte que le thread dispose d'un "espace de respiration" pour poursuivre le chemin d'exécution. Mais vous devriez également réfléchir à votre architecture. Si vous traitez des centaines de machines virtuelles, il vaut peut-être mieux utiliser le chargement différé et la mise à jour séquentielle de votre écran, par ordre d'importance pour votre public.

Voir aussi cette réponse pour plus d'explications: https://stackoverflow.com/a/1710868/21217