Salut à toutes et à tous,
Soit un TreeView avec un binding de l'ItemsSource sur une observableCollection<Lot>.
Soit de longues actions dans un autre Thread.
Je me suis vite rendu compte que je ne peux pas ajouter ou récupérer de Lot dans l'observableCollection parce que je ne suis pas sur le Thread de l'UI.
J'ai trouvé de l'info et fait ceci qui fonctionne :
C'est ici que ça se complique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public void AddLotToCollection(Lot lot) { Application app = System.Windows.Application.Current; if (app != null) app.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new DispatcherOperationCallback(AddLot), lot); } private object AddLot(object lot) { LotsCollection.Add((Lot)lot); return null; }
J'ai aussi besoin de récupérer des Lot dans l'observableCollection et de les modifier à partir de l'autre Thread.
J'avais espéré ceci
Malheureusement, le FindLot me retourne bien le bon lot, mais le FindLotByNumero retourne invariablement null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public Lot FindLotByNumero(string noLot) { Application app = System.Windows.Application.Current; if (app != null) { app.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new DispatcherOperationCallback(FindLot), noLot); } return null; } private Lot FindLot(object noLot) { return LotsCollection.FirstOrDefault(x => x.NoLot == noLot.ToString()); }
Il me semblait pourtant que le DispatcherOperationCallback retournait l'objet du delegate et que le BeginInvoke retournait l'objet, soit l'objet du delegate du DispatcherOperationCallback.
Qu'est-ce que je n'ai pas compris et comment dois-je faire ?
Merci de vos z'avis z'avisés.
Partager