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 に答える