微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

任务延迟后触发滚动事件 问题方法期待结果编辑

如何解决任务延迟后触发滚动事件 问题方法期待结果编辑

我试图避免在 ListView 滚动上多次调用以使用休息服务,但它似乎不起作用..

问题

滚动ListView时,不断触发滚动事件,多次调用rest服务。

方法

我决定在一个单独的线程中调用服务,延迟 11 秒

期待

调用服务后,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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。