Как добавить задержку в программу WPF без блокировки пользовательского интерфейса
Я создаю эмулятор устройства. Когда он запускается, требуется некоторое время для его инициализации. Это было бы логично представлено включением и немедленным переходом кИнициализация» состояние, и через некоторое время оно уходитГотовы" государство.
Я использую MVVM, поэтому ViewModel пока представляет всю логику устройства. Каждое из возможных состояний имеет стиль передачи данных, который будет отображаться представлением. Если я просто устанавливаю состояние при построении модели представления, представление отображается с правильным внешним видом.
Что я хочу сделать, это создатьсостояние тайм-аута "то есть, когда происходит какое-либо событие (запуск приложения, нажатие определенной кнопки), устройство переходит в состояние на фиксированное время, а затем возвращается к «готовы", или же "холостой ход» государство.
Я думал об использовании Sleep, но сон блокирует пользовательский интерфейс (так они говорят). Поэтому я думаю об использовании потоков, но я не уверен, как это сделать. Это то, что я получил до сих пор:
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
}
}