【问题标题】:use lambda expressions as parameter in Dispatcher.Invoke()在 Dispatcher.Invoke() 中使用 lambda 表达式作为参数
【发布时间】: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 表达式而不是自定义委托和方法?

【问题讨论】:

标签: c#-4.0 lambda expression dispatcher


【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2017-12-07
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多