アセンブリファイル(.dll)を読み込み、ある間隔でアセンブリファイル内のメソッドを実行し、その結果を辞書に格納しようとするプログラムを作成しています。その完全なコードはhere(pastebin.com)です。私の問題は、タイマーの辞書に物を追加すると辞書が更新できなくなっているようだということです。私は次のようにこの問題を再現関連するコードを削減することができました:F#:タイマーで辞書に項目を追加する
seq []
seq []
.
.
.
:
type SomeThing() as this =
do
let timer = new System.Timers.Timer()
timer.Elapsed.Add(this.AddItem)
timer.Interval <- 3000.0
timer.Enabled <- true
timer.Start()
member this.MyDict = new System.Collections.Generic.Dictionary<string, string>()
member this.AddItem _ =
this.MyDict.Add("hello", "world")
printfn "%A" this.MyDict
let mything = new SomeThing()
結果を、インタラクティブなセッションやLINQPadのようなもので実行した場合、出力されます明らかに、辞書は変更されていません。また、Visual Studioのデバッガで辞書が変更されていないことを確認しました。 MyDict.Add行がスキップされているかのようです。私はこれはタイマーと型の外の辞書を使用して問題がないように見えるので、私は型/ do文の私の使用と関係があると仮定します。
誰かが間違ったことを指摘できますか?
ありがとうございました!魅力のように動作します。私は、MyDictの 'this'修飾子がメンバーvalと動作しないことに注意してください。それ以外のこれは私が探していた答えです。 –
@MichaelTrittin:ありがとう、明らかに私の精神的なコンパイラはまだ完全に機能していません。 ; - ] – ildjarn