在 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)