Invalid Operation Exception
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:
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:
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
Code:
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 |
Je continu de chercher, si quelqu'un peut me donner une piste pour résoudre mon probléme sa serait d'un grand renfort.
Merci.