Sottoscrivere metodi a eventi¶
Introduzione
In C#, l’associazione tra un metodo e un evento, ovvero l’esecuzione del metodo ogni volta che l’evento viene generato, è detta sottoscrizione.
Quando un oggetto genera un evento, i dati dell’evento sono esposti tramite un corrispondente metodo delegato detto gestore eventi, a cui è possibile sottoscrivere un metodo.
In particolare, è possibile sottoscrivere metodi ai seguenti eventi:
cambio valore di una variabile
tutti gli eventi generati da un oggetto
un evento specifico generato da un oggetto
Per riferimenti sui gestori eventi vedere Eventi generici di variabili e oggetti e Riferimento su oggetti e variabili.
Sintassi per la sottoscrizione
La sottoscrizione si effettua tipicamente all’interno del metodo Start()
, come nell’esempio seguente:
public override void Start()
{
Session.UserChange += Session_UserChange;
}
Nell’esempio, tramite il gestore eventi UserChange
e l’operatore +=
, si sottoscrive il metodo Session_UserChange
all’evento di cambio utente.
Avvertimento
Annullare sempre la sottoscrizione all’interno del metodo Stop()
, per evitare consumo di memoria.
Suggerimento
in Visual Studio, dopo l’operatore +=
premere due volte il tasto TAB per inserire automaticamente un nuovo metodo. Per inserire automaticamente il metodo in Visual Studio Code fare riferimento ai suggerimenti dell’editor.
Per definire il metodo da eseguire, fare riferimento all’esempio seguente:
private void Session_UserChange(object sender, UserChangeEventArgs e)
{
Log.Info(e.newUser.BrowseName);
}
Gli argomenti del metodo sono i seguenti:
sender
: oggetto di tipoIUAObject
corrispondente al nodo origine dell’eventoe
: oggetto C# che contiene i dati dell’evento, diversi a seconda del tipo di dati del gestore eventi (nell’esempio, il tipo di dati èUserChangeEventArgs
).
Sintassi per annullare la sottoscrizione
Avvertimento
Annullare sempre la sottoscrizione all’interno del metodo Stop()
, per evitare consumo di memoria.
Per annullare una sottoscrizione, usare l’operatore -=
. Fare riferimento all’esempio seguente:
public override void Stop()
{
Session.UserChange -= Session_UserChange;
}
Sottoscrivere un metodo all’evento di cambio valore di una variabile
Per sottoscrivere un metodo al cambio valore di una variabile, usare il gestore eventi VariableChange
, fornito dalla classe IUAVariable
(vedere Eventi generici di variabili e oggetti).
Sottoscrivere un metodo a tutti gli eventi generati da un oggetto
Per sottoscrivere un metodo a tutti gli eventi generati da un oggetto, usare il gestore eventi UAEvent
, fornito dalla classe IUAObject
(vedere Eventi generici di variabili e oggetti).
Sottoscrivere un metodo a un evento specifico di un oggetto
Per sottoscrivere un metodo a un evento specifico generato da un oggetto, usare il corrispondente gestore eventi fornito dal tipo (vedere Riferimento su oggetti e variabili).
Di seguito un esempio in cui si usa il gestore eventi OnMouseClick
, fornito dalla classe Button
, per eseguire il metodo Button2_OnMouseClick
ogni volta che si preme il pulsante Button2.
public override void Start()
{
var button2 = Owner.Get<Button>("Button2");
button2.OnMouseClick += Button2_OnMouseClick;
}
private void Button2_OnMouseClick(object sender, MouseClickEvent e)
{
var label2 = Owner.Get<Label>("Label2");
var button = (Button)sender;
label2.Text = "Mouse click event on " + button.BrowseName;
}