デバイスエミュレータを構築しています。起動すると、初期化に時間がかかります。これは論理的には、電源を入れてすぐに「初期化」状態になり、しばらくすると「準備完了」状態になることで表されます。
私は MVVM を使用しているため、現時点では ViewModel がすべてのデバイス ロジックを表します。考えられる各状態には、ビューによってレンダリングされるデータトリガー スタイルがあります。ビューモデルを構築するときに状態を設定するだけで、ビューは正しい外観でレンダリングされます。
私がやりたいのは、「タイムアウト状態」を作成することです。つまり、何らかのイベントが発生すると (アプリケーションの起動、特定のボタンのクリック)、デバイスは一定時間状態になり、その後「準備完了」に戻ります」、または「アイドル」状態。
Sleep を使おうと思ったのですが、sleep は UI をブロックします (そう言われています)。そこで、Threads を使用することを考えていますが、その方法がわかりません。これは私がこれまでに得たものです:
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
}
}