6

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

我正在将我的一些 C# 代码移植到 F#,并且我正在努力使用 Dispatcher.Invoke 来获取 WPF 元素。由于我是 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# 中的翻译是什么?

4

1 回答 1

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
于 2013-03-05T16:51:33.127 回答