J'ai une situation dans laquelle je veux extraire des données d'une base de données et l'affecter aux info-bulles de chaque ligne dans un contrôle ListView dans WPF. (J'utilise C# 4.0.) Comme je n'ai jamais fait ce genre de chose auparavant, j'ai commencé une application plus petite et plus simple pour obtenir les idées avant d'essayer de les utiliser dans mon application WPF principale.Quand l'exécution différée se produit-elle?
L'une de mes préoccupations est la quantité de données qui pourraient baisser. Pour cette raison, j'ai pensé que j'utiliserais LINQ to SQL, qui utilise l'exécution différée. Je pensais que cela aiderait et ne pas abattre les données jusqu'à ce que l'utilisateur passe leur souris sur la ligne pertinente. Pour ce faire, je vais utiliser une fonction distincte pour affecter les valeurs à l'info-bulle, à partir de la base de données, passées sur les paramètres que je dois passer aux procédures stockées pertinentes. Je fais 2 requêtes en utilisant LINQ to SQL, en utilisant 2 procédures stockées différentes, et en assignant les résultats à 2 DataGrids différents.
Même si je sais que LINQ to SQL utilise l'exécution différée, je commence à me demander si une partie du code que j'écris peut aller à l'encontre de mon intention d'utiliser LINQ to SQL. Par exemple, en testant dans mon application plus simple, je choisis plusieurs valeurs différentes pour voir comment cela fonctionne. Une sélection de valeurs n'a pas ramené de données, car il n'y avait pas de données pour les paramètres donnés. Je pensais que cela pourrait potentiellement causer la confusion de l'utilisateur, donc j'ai pensé que je vérifierais la propriété Count de la liste que j'assigne de l'exécution de la méthode associée DBML (liée à la procédure stockée). En y réfléchissant, je pense qu'il serait nécessaire pour LINQ d'exécuter la requête, afin de me donner un résultat pour la propriété Count. Est-ce que je ne suis pas correct?
Si j'élimine l'appel à la propriété Count de la liste, je me demande encore si je pourrais avoir un problème; si LINQ peut toujours être appelé, parce que j'associe l'info-bulle au contrôle via un appel de fonction?
Oh, je me souviens de cette version d'Outlook aussi, lorsque je passe la souris sur l'icône de l'imprimante dans la barre de menu. J'ai détesté ça! J'aime votre idée d'utiliser un processus de travail en arrière-plan pour récupérer les données sur un thread séparé. Je pense que je vais faire ça. – Rod
C'est marrant, parce que c'est un problème d'interface utilisateur apparemment trivial, et pourtant c'est tellement ennuyeux que ça a complètement entaché l'expérience d'utiliser le programme pour moi. –