Dispatcher BeginInvoke

时间:2012-11-27 18:35:42

标签: c# wpf

有关Dispatcher.BeginInvoke

的问题

如果我有如下方法:

private void DoSomeWork()
{
   MyCanvas.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate
        {
            //Do something

            return null;

        }), null);
    }

我多次调用该方法,然后根据docs按顺序执行多个调用:如果在同一个DispatcherPriority上进行多个BeginInvoke调用,它们将按调用的顺序执行已经完成了。 Dispatcher.BeginInvoke Method MSDN

如何清除这个以阻止另一个呼叫或将队列重置为一个呼叫?

2 个答案:

答案 0 :(得分:1)

  

如何清除这个以阻止另一个呼叫或将队列重置为一个呼叫?

你没有。您无法控制调度程序队列。您可以做的是保持“待处理请求”的数量(当然,确保以原子方式更新它)并且只有在这是队列中的最后一次调用时才执行(即,当递减计数时给出0)。

另一种选择是在最后一次通话时保留某种计时器,并在一段时间内忽略进一步的通话。

如果你能详细说明你想要达到的目标,我们可以提供更具体的帮助。

答案 1 :(得分:1)

您提供的MSDN链接为您提供了更多挖掘的答案。

此操作返回可用于取消的DispatcherOperation对象。但是,这是基于每个呼叫,因为您无法完整地控制队列。