Condividi tramite


Istruzione RaiseEvent

Attiva un evento dichiarato a livello di modulo all'interno di una classe, di una maschera o di un documento.

Sintassi

RaiseEvent eventname[( argumentlist )]  

Parti

eventname
Obbligatorio. Nome dell'evento da attivare.

argumentlist
Opzionale. Elenco delimitato da virgole di variabili, matrici o espressioni. L'argomento argumentlist deve essere racchiuso tra parentesi. Se non sono presenti argomenti, le parentesi devono essere omesse.

Osservazioni:

Il parametro obbligatorio eventname è il nome di un evento dichiarato all'interno del modulo. Segue le convenzioni di denominazione delle variabili di Visual Basic.

Se l'evento non è stato dichiarato all'interno del modulo in cui viene generato, si verifica un errore. Il frammento di codice seguente illustra una dichiarazione di evento e una routine in cui viene generato l'evento.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

Non è possibile usare RaiseEvent per generare eventi non dichiarati in modo esplicito nel modulo. Ad esempio, tutti i moduli ereditano un Click evento da System.Windows.Forms.Form, non possono essere generati usando RaiseEvent in una maschera derivata. Se si dichiara un Click evento nel modulo modulo, il modulo shadowse l'evento del Click modulo. È comunque possibile richiamare l'evento del Click modulo chiamando il OnClick metodo .

Per impostazione predefinita, un evento definito in Visual Basic genera i gestori eventi nell'ordine in cui vengono stabilite le connessioni. Poiché gli eventi possono avere ByRef parametri, un processo che si connette in ritardo potrebbe ricevere parametri che sono stati modificati da un gestore eventi precedente. Dopo l'esecuzione dei gestori eventi, il controllo viene restituito alla subroutine che ha generato l'evento.

Annotazioni

Gli eventi non condivisi non devono essere generati all'interno del costruttore della classe in cui sono dichiarati. Anche se tali eventi non causano errori di runtime, potrebbero non riuscire a essere rilevati dai gestori eventi associati. Usare il Shared modificatore per creare un evento condiviso se è necessario generare un evento da un costruttore.

Annotazioni

È possibile modificare il comportamento predefinito degli eventi definendo un evento personalizzato. Per gli eventi personalizzati, l'istruzione RaiseEvent richiama la funzione di accesso dell'evento RaiseEvent . Per altre informazioni sugli eventi personalizzati, vedere Istruzione event.

Esempio 1

Nell'esempio seguente vengono usati eventi per contare i secondi da 10 a 0. Il codice illustra diversi metodi, proprietà e istruzioni correlati agli eventi, tra cui l'istruzione RaiseEvent .

La classe che genera un evento è l'origine evento e i metodi che elaborano l'evento sono i gestori eventi. Un'origine evento può avere più gestori per gli eventi generati. Quando la classe genera l'evento, tale evento viene generato in ogni classe che ha scelto di gestire gli eventi per tale istanza dell'oggetto.

Nell'esempio viene illustrato un timer che conta da 10 a 0 secondi e visualizza lo stato di avanzamento nella console. Al termine del conto alla rovescia, viene visualizzato "Fine".

Dichiarare una WithEvents variabile nella classe per gestire gli eventi dal timer:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Esempio 2

Aggiungere il codice seguente per implementare i gestori eventi e la logica del timer. In questo esempio viene illustrato come usare l'istruzione RaiseEvent per notificare ai gestori eventi quando il timer viene aggiornato o completato.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        Loop
        RaiseEvent Finished()
    End Sub
End Class

Quando si esegue l'esempio precedente, viene avviato il conteggio dei secondi da 10 a 0, visualizzando lo stato di avanzamento nella console. Quando è trascorso il tempo pieno (10 secondi), viene visualizzato "Done".

Vedere anche