C# 状态已更改首次未检测到更改
似乎C# 状态已更改首次未检测到更改,c#,rendering,blazor,C#,Rendering,Blazor,似乎statehaschange()仅在对任务(已找到)执行等待操作后触发组件的重新呈现 因此,我只想使用StateHasChanged进行重新渲染,而不是使用Task.delay或Task.Run 这是我的密码: protected async Task ClearSearch() { SearchTestCoupon = new Mechanic.Shared.TestCouponSearch(); IsBusy = true;
statehaschange()
仅在对任务(已找到)执行等待操作后触发组件的重新呈现
因此,我只想使用StateHasChanged
进行重新渲染,而不是使用Task.delay
或Task.Run
这是我的密码:
protected async Task ClearSearch()
{
SearchTestCoupon = new Mechanic.Shared.TestCouponSearch();
IsBusy = true;
TestCouponGroups = new List<Mechanic.Shared.TestCouponGroup>();
StateHasChanged(); // << -------- **FIRST TIME**
//await Task.Delay(TimeSpan.FromSeconds(1));
await GetTestCouponGroups(SearchTestCoupon);
}
protected async Task GetTestCouponGroups(object args)
{
TestCouponGroups = await TestCouponService.GetTestCouponGroupsAsync(SearchTestCoupon);
IsRowSelected = false;
IsBusy = false;
StateHasChanged(); // << -------- **SECOND TIME**
}
受保护的异步任务ClearSearch()
{
SearchTest优惠券=new-mechanical.Shared.TestCouponSearch();
IsBusy=true;
TestCouponGroups=新列表();
StateHasChanged();//StateHasChanged
不重新呈现组件,组件在事件委托(OnClick,OnMouseMouve…
)完成时重新呈现
因此,在您的情况下,如果要在第一个状态hasChanged
上重新渲染组件,您的代码应该是:
protectedvoid ClearSearch()
{
SearchTest优惠券=new-mechanical.Shared.TestCouponSearch();
IsBusy=true;
TestCouponGroups=新列表();
GetTestCouponGroups(SearchTest优惠券);//不要等待
StateHasChanged();//我也提出了这个问题。你的问题是一样的,但你不喜欢答案?我不想使用Task.Delay或Task.Run,正如我在问题中提到的那样。它对我有效!但我仍然使用异步方法,我应该调用wait来获得该方法。所以我不明白那里发生了什么,但它有效。你能在回答中解释一下吗?因为组件在退出该方法时正在渲染。如果等待,则在GetTestCouponGroups
完成后将重新渲染该组件。