Bonjour,
J'ai une erreur qui fait planter mon application "La collection a été modifiée, L’opération d'énumération peut ne pas s’exécuter"
Je cherche depuis déjà 3 semaines sans trouver de solutions, par contre j'ai réussi a localiser la source, une routine qui sert a mettre jour une Liste d'alarme.
Mon application tourne 24h sur 24 le plantage est aléatoire, des fois après 1h ou 1 journée...
Je m'explique:
-J'ai un automate brancher via un câble Ethernet a mon PC. Qui récupéré des alarmes.
-Mon logiciel récupère les alarmes est les affiches dans une listview.
J'ai une routine qui fait le traitement des alarmes:
Cette routine s’exécute toute les secondes:
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Private Sub GestionAlarme() Dim ListEtatAlarmeFichier As List(of EtatAlarme) = New List(of EtatAlarme) Dim ListEtatAlarmeAutomate As List(of EtatAlarme) = New List(of EtatAlarme) ' Je rempli ma ListEtatAlarmeFichier <-- Lecture de Ma base de donnée binaire fait maiso ' Je rempli ma ListEtatAlarmeAutomate <-- Lecture des alarmes automate 'Je fait la comparaison des deux listes pour savoir les alarmes qui on changer détat (Une alarmes a deux états 1 ou 0 actif ou non actif) 'en fonction du changement détat je viens modifier ma base de données binaire pour historiser mes alarmes avec leurs date d'apparition et de disparition 'Juste que la tout va bien 'Voici la partie qui pose probléme: (si je la met en commentaire je n'est pas de plantage) ''''''''''Debut Creation de la list d'alarme actif''''''''''''''''' If Not (ListEtatAlarmeAutomate.Count = Nothing) Then 'Verification que la lsite ne soit pas vierge ListeAlarmeActif = New WpfObservableCollection(Of LogAlarme) Dim alarmeactif As LogAlarme 'ListeAlarmeActif.Clear() For Each element As EtatAlarme In ListEtatAlarmeAutomate If (element.etat = True) Then 'seulement si l'alarmes et active alarmeactif = New LogAlarme alarmeactif.id = element.id theConfig = ConfigMgt.GetInstance() 'Lance l'instance pour faire la lecture de l'XML For Each def As DefautAutomate In theConfig.Defauts If (element.id = def.Id) Then alarmeactif.defaut = def.Description 'Charge le nom du defaut End If Next ListeAlarmeActif.Add(alarmeactif) End If Next End If ''''''''''Fin Creation de la list d'alarme actif'''''''''''''''''
Voici la déclaration de ma ListeAlarmeActif:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Property ListeAlarmeActifValue As WpfObservableCollection(Of LogAlarme) ' Liste des alarmes active 'wpf Public Property ListeAlarmeActif As WpfObservableCollection(Of LogAlarme) 'wpf Get Return ListeAlarmeActifValue End Get Set(ByVal value As WpfObservableCollection(Of LogAlarme)) 'wpf ListeAlarmeActifValue = value NotifyPropertyChanged("ListeAlarmeActif") 'Mise a jour de la variable pour le binding End Set End Property
Cette ListeAlarmeActif est afficher dans un userControl qui est une simple listview, voici le code du control AlarmeActif
Je continu de chercher, si quelqu'un peut me donner une piste pour résoudre mon probléme sa serait d'un grand renfort.
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 Class AlarmeActifView Private Sub Grid1_Loaded() Handles MyBase.Loaded, ListView1.Loaded, Grid1.Loaded ThreadPool.QueueUserWorkItem(New WaitCallback(Function(state As Object) Dim b As Binding = New Binding("ListeAlarmeActif") b.Source = WatchAlarmeNew.ThreadWatchAlarmeNew() MyBase.Dispatcher.BeginInvoke(Function() ListView1.SetBinding(ListView.DataContextProperty, b) Return (Nothing) End Function) Return Nothing End Function)) End Sub End Class
Merci.
Partager