Wpf F#dispatcher.invoke和delegate方法

Wpf F#dispatcher.invoke和delegate方法,wpf,f#,dispatcher,Wpf,F#,Dispatcher,我一直在寻找解决这个问题的办法,但没有成功 我正在将一些C#代码移植到F#中,我正在为WPF元素的Dispatcher.Invoke而挣扎。因为我在F#是一个彻头彻尾的傻瓜,我唯一能确定的是问题出在椅子和键盘之间 这是我的C#代码: foreach(ChartList.Keys中的var k) { 图表列表[k].Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, 新行动( 代表() { 图表列表[k].W

我一直在寻找解决这个问题的办法,但没有成功

我正在将一些C#代码移植到F#中,我正在为WPF元素的Dispatcher.Invoke而挣扎。因为我在F#是一个彻头彻尾的傻瓜,我唯一能确定的是问题出在椅子和键盘之间

这是我的C#代码:

foreach(ChartList.Keys中的var k)
{
图表列表[k].Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
新行动(
代表()
{
图表列表[k].Width=area.Width/totalColsForm;
图表列表[k]。高度=面积。高度/totalRowsForm;
图表列表[k]。左=面积。X+图表列表[k]。宽度*当前列;
图表列表[k]。顶部=面积。Y+图表列表[k]。高度*当前行;
图表列表[k].doShow();
}
));
}
我正在努力解决的部分是新操作(delegate()…)。编译器不喜欢我翻译它的任何尝试


这段代码在F#中的翻译是什么?

调用
Invoke
方法有两个重载,因此如果操作中有不完全正确的内容,可能会出现一些奇怪的错误,因为类型检查器不知道调用哪个重载。我刚试过这个,效果很好:

open System
open System.Windows.Controls
open System.Windows.Threading

let b = Button()
b.Dispatcher.Invoke(
    DispatcherPriority.Normal,
    Action(fun () -> 
        b.Content <- "foo"
    )) |> ignore
开放系统
打开System.Windows.Controls
打开System.Windows.Threading
设b=按钮()
b、 调度程序。调用(
调度员优先权,正常,
行动(乐趣()->
b、 内容忽略

你尝试了什么?我希望
fun()->…
操作(fun()->…)
能起作用。@Daniel,我确实尝试了这两种方法,但都没有成功。我得到了错误“没有方法'Invoke'的重载匹配”=>代理方法的翻译才是问题所在thx Gustavo,我尝试了你的代码,但仍然有我之前遇到的相同错误,即“接口类型的无效使用”当术语Action被下划线时,我想出了自己的解决方案。我声明显式地键入my_delegate=delegate of unit->unit,我的代码在ChartList中变成了k。键do ChartList。[k].Dispatcher.Invoke(System.Windows.Threading.dispatcherprioty.Normal,new my_delegate(fun()->ChartList.[k].doShow())|>忽略已编译的代码,但我仍然不明白为什么使用Action会引发错误您是否有任何名为Action的接口?请尝试拼写System.ActionIt Work!!谢谢Gustavo,但我不明白我也有所需的open语句所需的所有引用。奇怪!请尝试将Action放回原处,并将鼠标悬停在它上方o查看类型的全名。可能在您的项目中还有其他名为Action的内容,可能是您正在使用的图表库的某个组件,而您恰好在打开系统后打开了它。这正是事实!!再次感谢您