0

Dans mon application Silverlight 4.0, à un moment donné, après que l'utilisateur appuie sur un bouton, je dois créer quelques objets d'interface utilisateur qui prennent un certain temps (5 à 10 secondes). Pendant ce temps, l'interface utilisateur se fige bien sûr. J'ai décidé de mettre la création de ces objets dans un arrière-plan afin que l'interface utilisateur puisse au moins afficher la barre de progression.Création de UIElements hors thread Ui, Silverlight

Mais cette solution ne fonctionne pas. Pour créer un objet UI, vous devez être dans le thread UI. Si je mets la création de ces objets à l'intérieur Dispatcher.BeginInvoke() encore une fois mon interface utilisateur se fige. Dans la plupart des cas, sans même afficher la barre de progression. Y a-t-il un moyen de contourner ceci? Puis-je afficher la barre de progression pendant que Silverlight crée des objets d'interface utilisateur en arrière-plan?

Répondre

0

Jetez un oeil à ce forum post. Cela peut aider.

Au lieu d'utiliser:

System.Windows.Threading.Dispatcher.BeginInvoke(() => {}); 

Ils utilisent:

System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {}); 
0

Vous pouvez afficher un message personnalisé avant de créer des objets de l'interface utilisateur à l'intérieur BeginInvoke().

Exemple:

private void CreateObjects() 
{ 
    myMsg.Text = "Loading..."; 
    Dispatcher.BeginInvoke(() => { AddObjects() }); 
} 

Une fois que tous les objets sont créés, désactiver le message.

Vous pouvez également essayer la même chose avec la barre de progression.

+0

Oui, mais pour afficher myMsg, vous devez accéder à UIThread, et si les objets sont créés sur le même thread Ui n'a pas le temps de mettre à jour – grabah

+0

Ce que j'essayais de dire ici est à la place de la barre de progression. la mise à jour est en cours. Offcourse vous devez être dans l'UIThread pour le faire. BTW, avez-vous essayé cela? – Vivek