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;