【发布时间】:2016-05-02 09:39:10
【问题描述】:
在我的应用程序中,我有一个队列,它会在队列发生任何更改时触发通知,但有时会发生这种情况,当队列事件处理程序上有同时操作时,它会触发多次,这没关系,但我没有'不想要的是,...
以下是事件处理程序的代码:
private async void NotificationQueue_Changed(object sender, EventArgs e)
{
if (!IsQueueInProcess)
await ProcessQeueue();
}
在ProcessQueue 方法中,我将IsQueueInProcess 设置为true,并且无论何时完成它都设置为false。现在,问题是每当多个事件通知同时触发多个ProcessQeueue 方法开始执行,这是我不想要的。我想确保在任何给定时间都只会执行一次ProcessQeueue。
【问题讨论】:
-
有另一个布尔值告诉它当前是否正在执行?
-
查看this支持页面。
-
@zee 尝试将 IsQueueInProcess 设为静态。
-
你不能让
NotificationQueue_Changed()成为一个同步方法吗?这个await ProcessQueue()没有多大意义,因为调用方法本身就是一个即发即弃的方法(使用无法等待的异步 void)。 -
IsQueueInProcess 只是静态的,但问题是有时会同时引发一些 NotificationQueue_Changed 事件,并且在 IsQueueInProcess 在 ProcessQeueue 中将更改设置为 true 之前,多个 ProcessQeueue 开始执行。我不想让 ProcessQeueue 同步,只想忽略正在运行的事件
标签: c# .net wpf multithreading