Domanda

Ho un'applicazione multi livello in C # che si suppone per eseguire operazioni su un database (Se il primo utilizzo, si può creare il database e riempirlo con alcuni dati). Quando inizialmente ho progettato l'applicazione non ho considerazione per un possibile controllo di barra di avanzamento, per non parlare di qualsiasi segnalazione di progresso di qualsiasi tipo. Come posso modificare la progettazione dell'applicazione per essere in grado di segnalare operazioni di database avanzare al livello di interfaccia utente? C'è una soluzione là fuori che è riutilizzabile e non mi costringe a modificare tutte le mie funzioni di prendere ulteriori ingressi per la segnalazione?

È stato utile?

Soluzione

No. A seconda di quanto è grande la vostra applicazione è, hai un sacco di lavoro davanti a voi.

Per il progresso riferire al lavoro, è necessario il codice che sta eseguendo i lavori per eventi rilanciare quando un'unità di lavoro è stato completato. Che ha bisogno di eventi a essere gestite presso gli indicatori di livello di interfaccia utente e di progresso aggiornati.

Un buon posto per iniziare potrebbe essere quella di considerare di usare BackgroundWorker (c'è un esempio su MSDN qui - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx ). Una volta che si ha familiarità con il BackgroundWorker si dovrebbe essere in una posizione migliore per decidere quali modifiche è necessario apportare alla vostra applicazione.

Altri suggerimenti

Come Greg ha detto, c'è un sacco di lavoro da fare. Tuttavia, ci sono molti modi per affrontare il problema, e la migliore per voi dipende da ciò che passa informazioni contestuali giù dal client agli strati applicazione / database di già. Ad esempio, se un identificatore di token o una transazione sessione è passato dal client per l'applicazione nel normale corso di esecuzione di una query / transazione o un riferimento riconoscimento ripassato in modo asincrono dall'applicazione al cliente, poi per quelle query / operazioni per le quali Relazione sull'andamento dei lavori era necessario si potrebbe avere l'applicazione aggiornare una tabella di stato che il cliente potrebbe interrogare. Questo potrebbe ridurre la quantità di ri-lavoro richiesto. In sostanza, è necessario considerare il "middleware" in luogo già e vedere se qualcuno di che possono essere sfruttati per operazioni di correlare su più livelli.

Si potrebbe modificare il codice del server in modo che aggiorna le informazioni di avanzamento alla fine del server (senza cambiare le firme di funzione), e quindi avere un metodo separato che può interrogare queste informazioni separatamente.

Questo permetterebbe di supporto retrofit per il progresso senza avere alcun impatto sulle vostre chiamate esistenti al server, è sufficiente aggiungere un nuovo thread in background sul controllo dell'interfaccia utente per le informazioni di avanzamento aggiornato durante un compito lungo in esecuzione è in corso.

Edit: Credo che lo stesso approccio potrebbe funzionare per le attività che si svolgono nel client. Ma ancora, una classe di indicatore di avanzamento statico potrebbe essere utilizzato anche qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top