我有一个按钮单击事件处理程序,其中我需要有3秒的延迟,使一些标志为真...所以它需要时间来完全执行功能,现在同时,如果用户再次单击按钮,那么这是使标志为真的第二次单击也...所以我想取消第一次单击事件,只要我收到另一个单击请求。
这是我的代码:
private async void ClickEventHandler(ClickEvent obj)
{
int indexOfSelectedItem = this.List.IndexOf(this.List.FirstOrDefault(x => Convert.ToDouble(x.Value) == obj.Value));
if (indexOfSelectedItem > -1)
{
for (int i = 0; i < indexOfSelectedItem; i++)
{
var item = this.List.ElementAtOrDefault(0);
this.List.RemoveAt(0);
this.List.Add(item);
}
this.IsScrollEnabled = false;
await Task.Delay(3000);
this.IsScrollEnabled = true;
}
}
4条答案
按热度按时间ghg1uchk1#
是的,我需要取消第一个方法的执行,并再次调用该方法...以便在第二次单击该方法后等待3秒
下面是一个简单的取消令牌示例:
**P.S.**在本例中,只在Delay(...)方法中检查标记。如果需要在其他地方检查,请在此处插入对
token.ThrowIfCancellationRequested();
方法的调用。iyr7buue2#
您可以在单击按钮时更改变量,并在完成后将其更改回来,然后添加一个if语句来检查变量
rm5edbpk3#
就像xceing说的,你可以有一个变量来检查是否已经点击了,还没有完成这个过程。
以下是一个示例
你可以在进程完成后将变量设为false。2这样下次单击操作就可以正常工作了。
yruzcnhs4#
目前还不清楚您到底在做什么。一般的解决方案可以使用
Task.Run
执行可取消的任务,然后使用CancellationTokenSource
取消它。重要的是将关联的CancellationToken
传递给Task
API(以及任何一般支持取消的异步API),以便启用完全的取消支持,例如取消Task.Delay
:主窗口.xaml
主窗口.xaml.cs