Bonjour,
Mon problème est un peu complexe à mes yeux alors j'espère que je vais être capable de bien l'expliquer.
Quand je clique sur le bouton Démarrer un traitement s'exécute, mais je veux que l'utilisateur puisse cliquer sur Arrêter pour arrêter le traitement, alors je lance mon traitement dans un thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub cmdDemarrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDemarrer.Click nouveauThread = New Thread(AddressOf copiage) nouveauThread.Start() End Sub
Dans mon traitement je modifie mon interface, mais pour ce faire je dois créer un Event. que j'ai fait comme suis:
Et je lance un RaiseEvent lstboxChanged(strNomTable, False) pour modifier mon listbox.
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'Modifier le listBox destination Private Event lstboxChanged(ByVal table As String, ByVal clear As Boolean) Delegate Sub AssignerLstbox(ByVal table As String, ByVal clear As Boolean) Private Sub AfficherTable(ByVal table As String, ByVal clear As Boolean) Handles Me.lstboxChanged If lstDestination.InvokeRequired Then Dim moi As New AssignerLstbox(AddressOf AfficherTable) Invoke(moi, New Object() {table, clear}) Else If clear Then lstDestination.Items.Clear() Else lstDestination.Items.Add(table) End If End If End Sub
Cependant je dois maintenant utiliser une fonction d'une dll (que j'ai accès au code) et dans cette fonction je voudrais pouvoir modifier un élément de mon interface.
Alors je me demande comment faire?
Voici ce que j'ai fait mais ça ne fonctionne pas.
DANS maDLL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Public Event modifierProgressB(ByVal pourcentage As Double, ByVal pb As Windows.Forms.ProgressBar) Protected Overloads Function ImporterR() As Integer RaiseEvent modifierProgressB(intCpt / nbEnr * 100, progressBarre) End Function
DANS MON frmPRINCIPALE:
J'ai une erreur sur maDLL dans frmPrincipale....
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 Imports maDLL Public Class frmPrincipale Delegate Sub AssignerProgressT(ByVal progression As Double, ByVal pb As Windows.Forms.ProgressBar) Private Sub AfficherProgressT(ByVal progression As Double) Handles maDLL.modifierProgressB If pgbTable.InvokeRequired Then Dim moi As New AssignerProgressT(AddressOf AfficherProgressT) Invoke(moi, New Object() {progression}) Else pgbTable.Value = CInt(progression) End If End Sub End Class
Je suis à bout c'est vendredi, pte que je vais trouver de quoi lundi.
Merci d'y jeter un coup d'oeil.
Partager