在 Dispatcher.Invoke() 中使用 lambda 表达式作为参数

Posted

技术标签:

【中文标题】在 Dispatcher.Invoke() 中使用 lambda 表达式作为参数【英文标题】:use lambda expressions as parameter in Dispatcher.Invoke() 【发布时间】:2011-12-04 08:36:35 【问题描述】:

我有这样的问题: 有一些方法

private List<int> GetStatusList()
        
            return (List<int>)GetValue(getSpecifiedDebtStatusesProperty);
        

在主线程中调用它 - 我使用

`delegate List<int> ReturnStatusHandler();` ...

this.Dispatcher.Invoke(new ReturnStatusHandler(GetStatusList));

我怎样才能做到这一点,使用 lambda 表达式而不是自定义委托和方法?

【问题讨论】:

***.com/questions/4936459/… 【参考方案1】:

你可以通过这个:

new Action(GetStatusList)

(Action)(() =>  GetStatusList; )

【讨论】:

【参考方案2】:

您可以通过创建一个简单的方法来避免显式转换:

void RunInUiThread(Action action)

     Dispatcher.Invoke(action);

如下使用:

RunInUiThread(() =>

     GetStatusList();
);

【讨论】:

您好,您的示例代码有 2 个问题。首先,最后一行缺少')'。其次,如果我尝试您的示例,则会收到错误消息,即对于非静态字段 Dispatcher.Invoke(System.Action) 需要对象引用。 谢谢我已对上述内容进行了更正。 Dispatcher 是 DispatcherObject 上的一个非静态属性,它是 Control、Window、FrameworkElement 等的最低基类。因此您只能在非静态上下文中使用 Dispatcher。

以上是关于在 Dispatcher.Invoke() 中使用 lambda 表达式作为参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dispatcher.Invoke 从非主线程更改 WPF 控件

等待 Dispatcher.InvokeAsync 与 Dispatcher.Invoke

如何使用C#的方法 Dispatcher.Invoke =>

由 Dispatcher.Invoke 从多个线程调用的代码中的死锁

我怎样才能给 Dispatcher.Invoke 一个论点?

Application.Current.Dispatcher.BeginInvoke(action) VS。 Application.Current.Dispatcher.Invoke(action)