Async: E' la scelta giusta?

di il
4 risposte

Async: E' la scelta giusta?

Buonasera a tutti.

Ho la necessità di scrivere un programma che:
1) legge periodicamente dei dati da un database;
2) aggiorna dei campi in una form in base ai dati letti.

Nella classe principale ho creato una funzione async per effettuare le operazioni di lettura e scrittura e fin quì tutto funziona.
ho creato una "public static class" contenente tutte le variabili in modo che siano accessibili in tutte le form.
Creo un form popup modale dove visualizzare una parte dei dati letti.
In pratica una serie di label in cui scrivere i dati letti.
Le label vanno aggiornate ciclicamente o quando i dati letti sono cambiati.

A questo punto mi vengono in mente due strade:
1) La funzione async genera un evento ogni volta che ci sono dati da aggiornare e la form dispone di un ascoltatore in grado di intercettarlo e di conseguenza aggiorna le label con i nuovi dati.
In teoria sarebbe la soluzione più pulita in quanto aggiorno la form solo se ci sono dati da cambiare.
2) Scrivo una nuova funzione Asinc che ciclicamente aggiorna i dati della form.

Mi occorre un suggerimento su quale strada intraprendere e su cosa documentarmi.

Spero di essermi spiegato in modo abbastanza chiaro.
In caso contrario chiedetemi i chiarimenti che necessitano.

Grazie anticipate per l'attenzione.
Valerio.

4 Risposte

  • Re: Async: E' la scelta giusta?

    Io solitamente uso un timer a 100 ms per aggiornare il form, che aggiorna le label in ogni caso (anche se non è cambiato nulla). In questo modo la situazione worst case è identica alla situazione ordinaria e se ci sono problemi di rallentamento si vedono subito. Ma è questione di scelte
  • Re: Async: E' la scelta giusta?

    Ciao

    per me async/await non servono per questo contesto.
    Se hai una pagina sola, vedo bene l'utilizzo di un timer che parte all'apertura della finestra e termina alla chiusura.

    se usi WPF col paradigma MVVM, allora puoi cambiare il viewModel e alla view ci pensa il sistema.
    In caso contrario puoi aggiornare direttamente la form (ricordati di passare dal Dispatcher poichè non è corretto accedere ai controlli grafici da un thread diverso da quello grafico)
  • Re: Async: E' la scelta giusta?

    Per prima cosa: Grazie per le risposte.

    In effetti la domanda successiva sarebbe stata come fare ad aggiornare la grafica a partire dal Thread in quanto mi genera un'eccezione perché accedo alle proprièta di un oggetto (es.: label1.text = ...) da un thread diverso.
    Mi puoi spiegare cosa intendi per: "passare dal Dispatcher"?

    Quindi ricapitolando:
    - Posso usare una funzione asincrona per leggere/scrivere il database altrimenti mi troverei il programma che si muove a scatti.
    - Per aggiornare le form un timer è sufficiente.
    Ho compreso correttamenteoppure mi sono volato qualcosa?

    Grazie per la pazienza,
  • Re: Async: E' la scelta giusta?

    Ciao

    Vado a memoria: se accedi al DB all'interno di un evento scatenato da un timer, non dovresti avere problemi di programma che si muove a scatti. Async/Await serve solo se fai tali accessi durante un evento tipo "click" perchè quell'evento appartiene al thread grafico da cui ti devi staccare.

    Per quanto riguarda il Dispatcher, se vuoi cambiare la proprietà text di una label chiamata lblDescription, devi scrivere qualcosa del genere (vado a mano, quindi potrei sbagliare qualche lettera):
    
    
     lblDescription.Dispatcher.Invoke(new Action(() => 
                    {
                        lblDescription.Text = "Nuovo testo preso dal DB";
                    }));
    
    
Devi accedere o registrarti per scrivere nel forum
4 risposte