Costruttori di attività asincrone¶
Costruttore PeriodicTask(action, periodMilliseconds, excutingNode)
Crea un’attività di tipo PeriodicTask, che esegue codice a intervalli di tempo regolari.
PeriodicTask(Action action, int periodMilliseconds, IUANode executingNode);
Argomenti
action Action
Metodo o espressione lambda da eseguire.
periodMilliseconds int
Intervallo di tempo tra un’esecuzione e la successiva.
executingNode IUANode
Nodo in cui eseguire il codice.
Esempio
Di seguito un esempio in cui si crea un’attività myPeriodicTask che esegue il metodo IncremetVariable() ogni secondo (1000 millisecondi). Il metodo incrementa il valore della variabile variable1 di un’unità ogni volta che viene eseguito.
public override void Start()
{
myPeriodicTask = new PeriodicTask(IncrementVariable, 1000, LogicObject);
myPeriodicTask.Start();
}
public override void Stop()
{
myPeriodicTask.Dispose();
}
private void IncrementVariable()
{
variable1.Value = variable1.Value + 1;
}
private PeriodicTask myPeriodicTask;
Nota
in questo esempio il metodo IncrementVariable() non ha un argomento di tipo PeriodicTask poiché la semplicità del suo codice non rende necessario annullare l’attività.
Costruttore DelayedTask(action, delayMilliseconds, executingNode)
Crea un’attività di tipo DelayedTask, che esegue codice dopo un intervallo di tempo desiderato.
DelayedTask(Action action, int delayMilliseconds, IUANode executingNode);
Argomenti
action Action
Metodo o espressione lambda da eseguire.
delayMilliseconds int
Tempo dopo il quale eseguire il metodo o l’espressione lambda.
executingNode IUANode
Nodo in cui eseguire il codice.
Esempio
Di seguito un esempio in cui si crea un’attività myDelayedTask per eseguire il metodo ResetLabelText() dopo 10 secondi (10000 millisecondi). Il metodo cancella il testo di un’etichetta label1.
public override void Start()
{
myDelayedTask = new DelayedTask(ResetLabelText, 10000, LogicObject);
myDelayedTask.Start();
}
public override void Stop()
{
myDelayedTask.Dispose();
}
private void ResetLabelText()
{
label1.Text = string.Empty;
}
private DelayedTask myDelayedTask;
Nota
in questo esempio il metodo ResetLabelText() non ha un argomento di tipo DelayedTask poiché la semplicità del suo codice non rende necessario annullare l’attività.
Costruttore LongRunningTask(action, executingNode)
Crea un’attività di tipo LongRunningTask, per eseguire codice impegnativo a livello di tempo di esecuzione e di risorse computazionali.
LongRunningTask(Action action, IUANode executingNode);
Argomenti
action Action
Metodo o espressione lambda da eseguire.
executingNode IUANode
Nodo in cui eseguire il codice.
Esempio
Di seguito un esempio in cui si crea un’attività myLongRunningTask per processare un file CSV tramite il metodo ProcessCsvFile(). Il metodo ha come argomento l’attività stessa, il cui stato viene verificato tramite proprietà IsCancellationRequested dopo la lettura di ogni riga del file CSV. In questo modo, l’attività è annullabile.
using namespace System.IO; // For using the StreamReader
class public override void Start()
{
myLongRunningTask = new LongRunningTask(ProcessCSVFile, LogicObject);
myLongRunningTask.Start();
}
public override void Stop()
{
myLongRunningTask.Dispose();
}
private void ProcessCsvFile(LongRunningTask task)
{
using (var reader = new StreamReader(pathToCsvFile))
{
while (!reader.EndOfStream)
{
// Check whether task cancellation has been requested
if (task.IsCancellationRequested)
{
// Properly handle task cancellation here
return;
}
string line = reader.ReadLine();
// Process line
}
}
}
private LongRunningTask myLongRunningTask;