【发布时间】:2020-11-13 12:32:19
【问题描述】:
我正在 Blazor 服务器端页面中设置计时器。目标是每 x 秒调用一次 API,并根据返回值更新 UI。
我得到了这个代码:
private string Time { get; set; }
protected override void OnInitialized()
{
var timer = new System.Threading.Timer((_) =>
{
Time = DateTime.Now.ToString();
InvokeAsync(() =>
{
StateHasChanged();
});
}, null, 0, 1000);
base.OnInitialized();
}
这很好用。 UI 每秒都会使用新的时间值进行更新。但是,我不知道如何调用异步任务来获取值。我想换行:
Time = DateTime.Now.ToString();
用一行调用以下函数:
private async Task<string> GetValue()
{
var result = await _api.GetAsync<StringDto>("/api/GetValue");
return result.Text;
}
我试过这条线:
Time = GetValue().Result;
但我收到以下错误:
The current thread is not associated with the Dispatcher. Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state.
调用异步方法需要做什么?
非常感谢!
【问题讨论】: