-1
サーバーからデータを取得するためのボタンがあり、その後UIのテキストを更新する単純なアプリケーションです。 さらに、私は再び3秒ごとにデータを取得する別のスレッドを開始したいと思います。 以下のコードは、スレッドを作成してUI(バインディング値)を更新する正しい方法ですか? このシナリオでは、デリゲートNoArgDelegateの使用方法に欠点がありますか?または、デリゲートで非同期メソッドを渡すことは悪い考えですか?私はまだデリゲートとディスパッチャーのコンセプトを得ようとしています。デリゲートと非同期メソッドの正しい使い方
private delegate void NoArgDelegate();
public IAsyncCommand GetDataCommand { get; private set; } // binding for a "Get data" button
public JustAViewModel()
{
// ...
GetDataCommand = AsyncCommand.Create(() => GetDataAsync());
var fetcher = new NoArgDelegate(ContinuouslyFetchData);
fetcher.BeginInvoke(null, null);
}
public string Value // in xaml: TextValue="{Binding Value}"
{
get => _value;
set
{
if (_value != value)
{
_value = value;
RaisePropertyChanged("Value");
}
}
}
private async void ContinuouslyFetchData()
{
while (true)
{
System.Threading.Thread.Sleep(3000);
await GetDataAsync();
}
}
private async Task<string> GetDataAsync()
{
Value = await Task.Run(() => DataProvider.GetData());
return Value;
}