F#dispatcher.invoke和委托方法

时间:2013-03-05 15:45:36

标签: wpf f# dispatcher

我很长时间没有成功地寻找这个问题的解决方案。

我正在将一些C#代码移植到F#,我正在为一个WPF元素的Dispatcher.Invoke而苦苦挣扎。由于我是F#中的总菜鸟,我唯一能确定的是问题出在椅子和键盘之间。

这是我的C#代码:

foreach (var k  in ChartList.Keys)            
        {
            ChartList[k].Dispatcher.Invoke(
              System.Windows.Threading.DispatcherPriority.Normal,
              new Action(
                delegate()
                {
                    ChartList[k].Width = area.Width / totalColsForm;
                    ChartList[k].Height = area.Height / totalRowsForm;
                    ChartList[k].Left = area.X + ChartList[k].Width * currentCol;
                    ChartList[k].Top = area.Y + ChartList[k].Height * currentRow;
                    ChartList[k].doShow();
                }
            ));
         }

我正在努力的部分是新的Action(delegate()...)。编译器不喜欢我试图翻译它。

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

1 个答案:

答案 0 :(得分:6)

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