Je suis en difficulté lors de l'utilisation de l'arrière-plan pour créer mon modèle d'objet.Comment puis-je créer un contrôle générique à partir d'un thread de backgroundWorker?
Comme je comprends pourquoi, je suis incapable de trouver une solution de contournement.
Voici la logique pseudo:
Appel Webservice async
Lors de la réception, ouvrez un travailleur de fond, et les données de charge dans les commandes en arrière-plan
dans la méthode de charge , recherchez un objet existant et s'il n'est pas trouvé, créez-en un nouveau.
Tous les objets créés hérite de contrôle (avec une couche transparente résumé).
Alors que je crée des contrôles sur le thread principal, la fonction beau travail:
public static T Find<T>(ObservableCollection<T> collection, int objectId)
where T : FormaliteBaseControl, new()
{
foreach (T item in collection)
{
if (item.ObjectId == objectId)
return item;
}
return new T();
}
Bien sûr, lorsqu'il est appelé à partir du fil de fond, une exception fil croix se produit au « nouveau T() » Dans Silverlight , il n'y a aucun moyen d'appeler Dispatcher.Invoke de manière synchrone.
Et pendant que je crée environ 450 objets de cette façon, je voudrais garder la création du modèle objet en arrière-plan sans diminuer les performances avec Thread.Sleep ou d'autres méthodes "géniales".
Merci pour vos réponses.
Dans quel type de conteneur les 450 commandes d'interface sont-elles placées? Un ItemsControl ou ListBox? Quelque chose qui est virtualisé? – WiredPrairie
Étant donné que vous utilisez un thread, vous pouvez rencontrer des problèmes avec la collection que vous utilisez également - si vous modifiez la collection à partir d'un autre thread (alors qu'un autre thread utilise un énumérateur, via foreach). – WiredPrairie