问题描述
我试图避免在 ListView
滚动上多次调用以使用休息服务,但它似乎不起作用..
问题
滚动ListView
时,不断触发滚动事件,多次调用rest服务。
方法
期待
在调用服务后,busy
属性仍设置为 true 11 秒,因此即使触发滚动事件它也不会调用该服务,因为 busy
属性为 true。
结果
服务被调用一次,但在 11 秒后再次触发滚动事件并再次调用服务。
编辑
我开始滚动,并且事件被多次命中,因为每次 scroll-Y 值的变化都会触发该事件,导致调用服务 5 次(我想要调用服务 1 次)
例如:
请注意,初始滚动 y 值为 0。我滑动以滚动它。 假设滑动后滚动值为 5(事件被击中 5 次),因此我尝试解决问题是通过使用任务在单独的线程中调用服务,但发生的情况是事件被触发并运行任务调用该服务,并且因为它在不同的线程上运行,所以它会立即完成该事件(我的意思是我退出该事件),并且在 11 秒后该事件再次被击中,依此类推..
发生了什么
我想要的是调用其余服务 1 次,而不是 5 次。
private void Scrollview_Scrolled(object sender,ScrolledEventArgs e)
{
Task.Run(async () =>
{
if (IsBusy)
return;
IsBusy = true;
await _services.IDealsMService.GetMoreDealsAsync(param1,param2);
await Task.Delay(TimeSpan.FromSeconds(11));
}
}
解决方法
尝试:
bool IsBusy { get; set; } = false;
private async void Scrollview_Scrolled(object sender,ScrolledEventArgs e)
{
if (IsBusy)
return;
IsBusy = true;
await _services.IDealsMService.GetMoreDealsAsync(param1,param2);
await Task.Delay(TimeSpan.FromSeconds(11));
IsBusy = false;
}