1

关于 Dispatcher.BeginInvoke 的问题

如果我有如下方法:

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

            return null;

        }), null);
    }

我多次调用该方法,然后按照文档创建的顺序执行多个调用:如果在同一个 DispatcherPriority 进行多个 BeginInvoke 调用,它们将按照调用的顺序执行。 Dispatcher.BeginInvoke 方法 MSDN

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

4

2 回答 2

1

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

你没有。您无法控制调度程序队列。您可以做的是保留“待处理请求”的计数(当然,确保自动更新它)并且仅在这是队列中的最后一次调用时执行(即当递减计数时为 0)。

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

如果您可以提供有关您要实现的目标的更多详细信息,我们可以提供更具体的帮助。

于 2012-11-27T18:40:35.963 回答
1

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

此操作返回可用于取消的DispatcherOperation对象。但是,这是基于每次调用的,因为您无法完全控制队列。

于 2012-11-27T18:41:51.197 回答