Ho sviluppato un progetto Windows Form in cui ho 10 compiti da svolgere e vorrei farlo in un modo async
. Queste attività verranno visualizzate quando l'utente fa clic su un pulsante e chiamo un metodo async
per fare ciò. Nel mio codice, ho già una lista di parametri per questi processi.Come fornire un feedback all'interfaccia utente in un metodo asincrono?
Le mie domande è:
A) Come trasformare il mio codice per eseguire tutti i processi in parallelo? (Vorrei implementare async/attendere)
B) Come fornire un feedback alla mia domanda di interfaccia utente?
Il soffietto codice è quello che ho provato:
mio pulsante per chiamare un metodo per avviare i processi
private void button1_Click(object sender, EventArgs e)
{
// almost 15 process
foreach (var process in Processes)
{
// call a async method to process
ProcessObject(process);
}
}
Il metodo per simulare il mio processo di ottenere un parametro
private async void ProcessObject(ProcessViewModel process)
{
// this is my loop scope, which I need to run in parallel
{
// my code is here
// increment the progress of this process
process.Progress++;
// feedback to UI (accessing the UI controls)
UpdateRow(process);
}
}
Ho provato questo, ma non sono sicuro se è il modo giusto per aggiornare la mia interfaccia utente (una griglia).
private void UpdateRow(ProcessViewModel process)
{
dataGridView1.Rows[process.Index - 1].Cells[1].Value = process.Progress;
dataGridView1.Refresh();
}
Non si è in attesa di 'ProcessObject'. Typo o ..? –
No, sto solo chiamando il metodo ProcessObject. Non ho un risultato per questo metodo, dovrei cambiarlo in attesa? –
Questo può essere fatto anche con TPL: http://stackoverflow.com/questions/16913560/want-to-use-task-parallel-library-with-progress-reporting-for-updating-database – Schwarzie2478