Ho scritto un'app WPF che sta iniziando a soffrire. Non c'è un modo reale di aggiungere nuove funzionalità nel suo stato attuale, è diventato lento da usare. Questa applicazione è stata avviata come demo e purtroppo è stata venduta e successivamente ampliata (sigh).
All'inizio era solo un sacco di codice tutto su Main. È stato rapidamente messo insieme per dimostrare un concetto. L'applicazione effettua chiamate API e raccoglie dati una volta al secondo, i dati vengono quindi visualizzati sull'interfaccia utente in una serie di fantastici widget.
Chiamare l'API dal thread principale una volta al secondo bloccava l'interfaccia utente. Quindi questo è stato spostato in un BackgroundWorker.
Nel tentativo di separare il codice, UserControls è stato creato per ogni widget e Main è ora un'aggregazione di quelli. BackgroundWorker raccoglie i dati dall'API e li invia ai widget per aggiornare l'interfaccia utente.
A causa di BackgroundWorker, non è possibile aggiornare direttamente gli UserControls (non è possibile accedere ai controlli da un thread diverso) e tutto utilizza il Dispatcher. Il buffer del Dispatcher viene aggiunto a una velocità maggiore di quella che l'UI può aggiornare e i dati visualizzati presto non sono sincronizzati e stai guardando le vecchie informazioni mentre l'app è occupata a scricchiolare altri nuovi dati e metterli in coda al Dispatcher.
Quale sarebbe un approccio più adatto. Ho alcune idee, ma visto che non sono un esperto del WPF sarei interessato a conoscere i modi migliori per riscrivere / refactare questa app.