Bonjour a tous,
J'espère ne pas vous induire en erreur avec le titre de mon post. Voici mon problème :
J’exécute une grosse opération depuis un BackgroundWorker (scrutation d'une arborescence à la recherche de certains fichiers selon certains critères et quand le ou les fichiers sont trouvés je mets a jour une table 'Paths' avec inscription du chemin trouvé). Pour m'éviter des effets indésirables, je désactive a ce moment là certains événements dans ma procédure ActiveControlesHandler, notamment ceux liés aux tables.
Cette procédure fonctionne très bien sauf depuis mon BackgroundWorker depuis lequel je n'arrive pas a désactiver les événements. Voici mes constations après avoir placé plusieurs points d'arrêts et fait du pas a pas :
Ma variable 'ControleHanddlerIsActive' est égale a False chaque fois que je rentre dans la procédure depuis mon BackgroundWorker alors qu'au lancement du programme cette variable a été correctement initialisé a True et les événements activés.
Mieux qu'un long discours voici l'extrait de mon code :
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
Public Class frmModPaths
Dim ControleHanddlerIsActive As Boolean
 
    Public Sub ActiveControlesHandler(ByVal State As Boolean)
 
        If State = True And ControleHanddlerIsActive = False Then
            AddHandler DataGridView1.CurrentCellDirtyStateChanged, AddressOf EventCurrentCellDirtyChanged
            AddHandler MainBindingSourcePaths.CurrentItemChanged, AddressOf EventbsCurrentItemChanged
            AddHandler MainBindingSourcePaths.CurrentChanged, AddressOf EventbsCurrentChanged
            AddHandler MainBindingSourcePaths.PositionChanged, AddressOf EventbsPositionChanged
            AddHandler dtTablePaths.ColumnChanging, AddressOf EventTableColumnChanging
            AddHandler dtTablePaths.ColumnChanged, AddressOf EventTableColumnChanged
            AddHandler dtTablePaths.TableNewRow, AddressOf EventTableNewRow
 
            ControleHanddlerIsActive = True
        ElseIf State = False And ControleHanddlerIsActive = True Then
            RemoveHandler DataGridView1.CurrentCellDirtyStateChanged, AddressOf EventCurrentCellDirtyChanged
            RemoveHandler MainBindingSourcePaths.CurrentItemChanged, AddressOf EventbsCurrentItemChanged
            RemoveHandler MainBindingSourcePaths.CurrentChanged, AddressOf EventbsCurrentChanged
            RemoveHandler MainBindingSourcePaths.PositionChanged, AddressOf EventbsPositionChanged
            RemoveHandler dtTablePaths.ColumnChanging, AddressOf EventTableColumnChanging
            RemoveHandler dtTablePaths.ColumnChanged, AddressOf EventTableColumnChanged
            RemoveHandler dtTablePaths.TableNewRow, AddressOf EventTableNewRow
 
           ControleHanddlerIsActive = False
        End If
 
    End Sub
End Class
Les lignes executées depuis mon BackGroundWorker :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
frmModPaths.ActiveControlesHandler(False)
' .....Opérations de mise a jour de la table 'Paths'
frmModPaths.ActiveControlesHandler(True)
Merci a tous pour votre aide.