Gestione dei messaggi con diversi indicatori

4

Attualmente sto lavorando su un'applicazione, che mostrerà diversi messaggi (allarmi - avvisi - suggerimenti) su un display collegato via cavo.

Poiché questi messaggi dipendono da diversi indicatori, devo decidere quando mostrare (uno o più indicatori adatti) o nascondere (nessun indicatore adatto). Per la prima implementazione uso una sorta di contatore: se il contatore è == 0 il messaggio viene visualizzato, incrementandolo (da qualsiasi sorgente) lo si nasconde. Finché una fonte è contro la visualizzazione, si nasconderà. A lungo termine questo porterà al seguente problema:

In fase di runtime non riesco a vedere chi ha disattivato un messaggio. Inoltre, se la dimensione del programma aumenterà, posso facilmente perdere il punto su cosa sta succedendo.

Posso immaginare che questo problema sia piuttosto comune, quindi qualche idea per una buona implementazione? Il framework generale per questo è un ambiente embedded, utilizzando C e C ++.

    
posta vowe 15.12.2015 - 08:15
fonte

1 risposta

1

Ci sono alcuni modi per gestirlo, ma il modo più semplice è probabilmente usare un Enumeratore. Sono un nativo di C #, quindi lo userò ma dare un'occhiata a questo articolo su MSDN che ti permetterà di vedere come far funzionare un Enum in C.

In modo efficace, un Enum è un elenco ordinato di parole che nasconde un valore intero e vi si accede usando EnumName.EnumValue e può essere utilizzato per un numero di trucchetti da Chiavi di dizionario a marcature di stato. Ancora meglio, sono molto economici dal punto di vista delle prestazioni.

Facciamo uno sforzo per rappresentare i quattro stati che hai attualmente (Allarme / Avviso / Suggerimento / Off) come enume:

enum MessageState{ Off, Alarm, Warning, Hint}

Ogni messaggio dovrebbe essere impostato in modo da richiedere uno di questi quattro valori (mi spingerei fino al valore predefinito su Off) quando vengono inviati sullo schermo. Lì, utilizzerai qualsiasi metodo tu voglia per determinare chi si presenta - probabilmente chiunque non abbia un MessageState uguale a MessageState.Off .

Puoi anche beneficiare nascondendo un codice di registrazione nel modo in cui lo cambi. Sfrutta la possibilità e trasforma MessageState sull'oggetto in un campo private . Questo costringerà chiunque voglia cambiare il MessageState a essere uno di quegli oggetti, o chiedere all'oggetto di cambiarlo. Quando questo valore viene modificato, puoi richiedere il cambio-r (?) Per dirti chi sono. In questo modo, puoi registrare chi ha modificato il messaggio quando:

private void ChangeMessageState(MessageState state, User user)
{ 
    //Do stuff here!
}
    
risposta data 08.03.2017 - 00:08
fonte

Leggi altre domande sui tag