2010-05-17 16 views
7

HI,Alla ricerca di una semplice alternativa al Thread.Sleep

Durante lo sviluppo della mia app, usavo Thread.Sleep per dare ai nostri dispositivi esterni po 'di tempo per regolare le impostazioni prima di effettuare query, in quanto sono molto vecchio e lento.

Ora voglio sostituirli con qualcosa di più elegante e corretto.

Qualcuno ha un modo semplice di "aspettare" per un dispositivo piuttosto che dormire, tenendo presente che il dispositivo non ci fa sapere quando è pronto, quindi un'attesa è quanto di meglio possiamo fare! ??

Saluti, George.

risposta

7

Potrebbe essere la soluzione migliore per seguire il percorso di utilizzo di un timer per svegliarsi periodicamente e vedere se il dispositivo è pronto.

Hai almeno due opzioni qui System.Timers.Timer o System.Threading.Timer.

Tuttavia, questo probabilmente significa che ci si deve ottenere più coinvolti in multithreading, in modo che il timer può comunicare al resto del programma per continuare a quando il dispositivo è pronto (ad esempio con un WaitHandle o qualche tipo, come ad esempio un AutoResetEvent).

Non c'è nulla di intrinsecamente sbagliato con l'utilizzo Thread.Sleep per bloccare un singolo filo IMHO sincrono.

+0

Beh, se chiedi al dispositivo informazioni ti dà semplicemente un messaggio di errore ER, quindi ho trovato che l'aiting era l'opzione migliore. L'intero ap deve attendere che questo dispositivo risponda comunque, quindi se Sleep() non è una cattiva pratica, allora sono felice di continuare ad usarlo in thread singoli. Grazie a tutti per l'informazione, molto apprezzata. – George

+0

Probabilmente sarei incline a lasciarlo così com'è. Inizi ad aggiungere complessità avendo timer separati che poi devono segnalare al resto del programma che il dispositivo è pronto. –

1

Il modo migliore per rendere un'attesa di applicazione è quello di utilizzare Thread.Sleep()

Naturalmente, si ha un problema reale in cui si sta bisogno di selezionare un calendario arbituary attendere che il dispositivo da aggiornare.

Non c'è modo che si app può provare a portare avanti e riprovare se non riesce a causa dello stato del dispositivo? (Naturalmente ci dovrebbe essere un numero massimo di tentativi)

1

Finché si sta facendo le chiamate da un thread in background, che probabilmente non è un modo terribile per farlo. È possibile utilizzare anche un timer per richiamare dopo un intervallo; più ecomplex (non molto), ma forse più facile da cancellare (ovviamente, puoi anche semplicemente gestire un thread-interrupt per cancellare un sonno).