【发布时间】:2021-02-06 20:17:33
【问题描述】:
我试图避免多次调用以消耗 ListView 滚动上的休息服务,但它似乎不起作用..
问题
滚动ListView时,连续触发scroll事件,多次调用rest服务。
方法
我决定在一个单独的线程中调用服务,延迟 11 秒
期待
调用服务后,busy 属性仍设置为 true 11 秒,因此即使触发滚动事件,它也不会调用服务,因为busy 属性为 true。
结果
该服务被调用一次,但 11 秒后再次触发滚动事件并再次调用该服务。
编辑
我开始滚动,并且事件被多次点击,因为每次滚动 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));
}
}
【问题讨论】:
-
@Cfun 不,它没有,我不需要它,因为我不等待任务..
-
所以你想限制或消除事件?所以它每 11 秒最多触发一次?
-
试图进行节流
-
尝试了类似的方法但没有奏效,我仍然会尝试您的解决方案并让您知道
-
好吧,我只共享了部分代码,所以问题是我也在以编程方式从单独的线程滚动,这很麻烦..
标签: c# xamarin xamarin.forms scroll async-await