Я создаю эмулятор устройства. Когда он запускается, требуется некоторое время для его инициализации. Это было бы логически представлено включением и немедленным переходом в состояние «Инициализация», а через некоторое время - в состояние «Готов».
Я использую MVVM, поэтому ViewModel пока представляет всю логику устройства. Каждое из возможных состояний имеет стиль с запуском по данным, который должен отображаться в представлении. Если я просто установлю состояние при построении модели представления, представление будет отображаться с правильным внешним видом.
Я хочу создать «состояние тайм-аута», то есть, когда происходит какое-то событие (запуск приложения, нажатие определенной кнопки), устройство переходит в состояние на фиксированное время, а затем возвращается в состояние «готово». ", или состояние" простоя ".
Я думал использовать Sleep, но сон блокирует UI (так говорят). Поэтому я думаю об использовании потоков, но не знаю, как это сделать. Вот что у меня получилось:
using System.ComponentModel;
namespace EmuladorMiotool {
public class MiotoolViewModel : INotifyPropertyChanged {
Estados _estado;
public Estados Estado {
get {
return _estado;
}
set {
_estado = value;
switch (_estado) {
case Estados.WirelessProcurando:
// WAIT FOR TWO SECONDS WITHOUT BLOCKING GUI
// It should look like the device is actually doing something
// (but not indeed, for now)
_estado = Estados.WirelessConectado;
break;
}
RaisePropertyChanged("Estado");
}
}
public MiotoolViewModel() {
// The constructor sets the initial state to "Searching"
Estado = Estados.WirelessProcurando;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName) {
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public enum Estados {
UsbOcioso,
UsbAquisitando,
UsbTransferindo,
WirelessNãoPareado,
WirelessPareado,
WirelessDesconectado,
WirelessProcurando,
WirelessConectado,
WirelessAquisitando,
DataLoggerOcioso,
DataLoggerAquisitando,
Erro,
Formatando
}
}