Portée d'une variable depuis un Thread secondaire
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:
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:
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.