gpt4 book ai didi

c# - 执行更改 UI 的方法时,是否必须在 DIspatcher 上调用 CheckAccess()?

转载 作者:行者123 更新时间:2023-11-30 17:43:27 25 4
gpt4 key购买 nike

我有一段代码有时从 UI 线程调用,有时从其他线程调用。

    public void Notify(string message)
{
if (message == null)
{
throw new ArgumentNullException("message", string.Empty);
}

var actions = _invocationList.GetActions(message);

if (actions != null)
{
Unity.Container.Resolve<Dispatcher>()
.Invoke(new Action(() => actions.ForEach(action => action.DynamicInvoke())));
}
}

在上面的示例中,我应该使用 Dispatcher.CheckAccess() 添加条件并在没有 Dispatcher 的情况下简单地运行一个操作,还是通过 Invoke 调用一个操作就足够了,而不管我们现在在哪个线程中?为什么?

最佳答案

如果您了解了 Invoke(action) 方法的实现方式,您会发现 checkAccess() 是自动执行的。所以你也不需要这样做。

这是 Dispatcher 类源代码的相关部分:

// Fast-Path: if on the same thread, and invoking at Send priority,
// and the cancellation token is not already canceled, then just
// call the callback directly.
if(!cancellationToken.IsCancellationRequested && priority == DispatcherPriority.Send && CheckAccess())

您可以通过导航以 here 开头的代码来亲眼看到它.

关于c# - 执行更改 UI 的方法时,是否必须在 DIspatcher 上调用 CheckAccess()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com