Bonsoir a tous,
Je commence a peine a me lancer dans le multithread et je rencontre un problème d’accès a une méthode a partir de plusieurs Threads, je m'explique :
Actuellement j'utilise une méthode pour Désactiver des événements le temps de faire de gros traitements sur des DataTable, puis pour réactiver ces événements dés que les traitements sont terminés. cette méthode est appelée ponctuellement a divers endroit de mon code mais toujours depuis le Thread principale (Thread A) ce qui ne pose aucun problème.

Aujourd'hui j'ai besoin de faire la même action mais depuis un Thread secondaire (Thread B) seulement les Threads risquent de se faire concurrences aux niveaux des Activation/Désactivation. Il faudrait que si Thread A désactive les Events, alors Thread B n'a pas le droit les réactiver tant que Thread A n'a pas terminé et réactivé ces Events, (il doit attendre sont tour). Idem depuis Thread B. (Le fonctionnement normal de l'application veux que ces événements soit toujours activés en temps normal). Je ne sais pas du tout comment faire cela.

Cela donne un truc du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
ActiveControlesHandler(False)
' ici on lance des opérations sur un DataTable
ActiveControlesHandler(True)
Le code pour Désactiver/Activer les évenements :
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
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
Je vous remercie beaucoup pour votre aide.