Bonjour à tous,
j'ai un thread "ProcessWatcher" qui contrôle le fonctionnement d'un Processus windows et qui possède une méthode qui envoie directement un message toutes les secondes à l'UI.
Pour faire le cross-Thread j'utilise ceci dans le Form qui doit afficher le message :
L'invoke se fait donc dans le Form. J'aimerais changer ça et créer un évent du Thread qui envoie des messages Thread-safe. Ainsi mes Form n'ont plus qu'a s'abonner sans faire d'invoke puisque déjà exécuté depuis l'Event du Thread.
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 Delegate Sub DelegateAfficheMessage(ByVal Message As String, StatusAlerte As StatusAlerte) #Region "Methodes invoquées utilisés par le Thread ProcessWatcher" Private Sub InvoquerAfficheMessage(ByVal Message As String, StatusAlerte As StatusAlerte) If Me.InvokeRequired Then Dim MyDelegate As New DelegateAfficheMessage(AddressOf AfficheMessageLauncherAC) Me.Invoke(MyDelegate, Message, StatusAlerte) Else Call AfficheMessage(Message, StatusAlerte) End If End Sub Private Sub AfficheMessage(ByVal Message As String, StatusAlerte As StatusAlerte) ToolStripStatusLabel3.Text = Message Select Case StatusAlerte Case StatusAlerte.Normal ToolStripStatusLabel3.Image = My.Resources.status_offline Case StatusAlerte.Vert ToolStripStatusLabel3.Image = My.Resources.status Case StatusAlerte.Orange Case StatusAlerte.Rouge End Select End Sub
J'ai trouvé un exemple de code en C# qui ressemble de loin à ce que je veux faire mais je n'ai pas réussi à le convertir, et surtout je ne sait pas si c'est possible à faire en VB.NET. Est ce que quelqu'un peux m'aider s'il vous plait ?
Voici l'exemple en C# mais c'est pour du "PropertyChanged", mon Event à moi s'appellerait plutôt "AfficheMessage" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
Partager