【发布时间】:2018-10-26 19:11:43
【问题描述】:
Dispatcher.Invoke 方法可以将Delegate 或Action 实例作为参数。 但是 Dispatcher.BeginInvoke 方法不接受 Action 实例;它只支持Delegate。
在 BeginInvoke 的情况下,它迫使我将 lambda 表达式转换为 Action。 例如:
Dispatcher.Invoke(() => Title = "foo"); // success
// Dispatcher.BeginInvoke(() => Title = "foo"); // error
Dispatcher.BeginInvoke((Action)(() => Title = "foo")); // success
Dispatcher.BeginInvoke 方法不能接受 Action 参数有什么原因吗?
【问题讨论】:
-
您必须询问 API 设计人员才能确定,其他人无法判断。也许他们只是没有考虑过。这很糟糕,但你可以定义一个扩展方法来规避它。
-
微软程序员从 2002 年 6 月开始编写 WPF 代码,.NET 1.0 才刚刚发布。没有什么是你不能用扩展方法解决的。
-
您可能想使用 .Net 4.5 中引入的
Dispatcher.InvokeAsync。这应该可以满足您的所有需求,并使生活更轻松。