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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
Imports System.ComponentModel
Public Class formTest
Public Delegate Sub SetFormEvt(sender As Object, e As GenerateTextEventArgs)
Private WithEvents bgwCode As BackgroundWorker
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Button1.Enabled = False
bgwCode = New BackgroundWorker
bgwCode.WorkerReportsProgress = True
bgwCode.WorkerSupportsCancellation = True
Dim c As New Compte
AddHandler bgwCode.DoWork, AddressOf c.Go
AddHandler bgwCode.RunWorkerCompleted, AddressOf Fini
AddHandler c.OnTextChanged, AddressOf FormEvt
bgwCode.RunWorkerAsync()
End Sub
Private Sub FormEvt(sender As Object, e As GenerateTextEventArgs)
If Label1.InvokeRequired Then
Label1.Invoke(New SetFormEvt(AddressOf FormEvt), sender, e)
Else
Label1.Text = DirectCast(e, GenerateTextEventArgs).EventText '"CALL"
End If
End Sub
Private Sub Fini()
Button1.Enabled = True
End Sub
End Class
Public Class GenerateTextEventArgs
Inherits EventArgs
Private myEventText As String = Nothing
Public Sub New(ByVal theEventText As String)
If theEventText Is Nothing Then
Throw New NullReferenceException()
End If
myEventText = theEventText
End Sub
Public ReadOnly Property EventText As String
Get
Return Me.myEventText
End Get
End Property
End Class
Public Class Compte
Public Delegate Sub TextGeneratedEventHandler(ByVal sender As Object, ByVal e As GenerateTextEventArgs)
Public Event OnTextChanged As TextGeneratedEventHandler
Public Sub Go()
Dim nb = 100
For i As Integer = 0 To nb
Dim e As GenerateTextEventArgs = New GenerateTextEventArgs("Compteur = " & i.ToString())
'TODO : Call Event
Threading.Thread.Sleep(100)
RaiseEvent OnTextChanged(Me, e)
Next
End Sub
End Class |
Partager