私は現在、「実世界関数型プログラミング」に取り組んでいます。Windowsフォームを使用した「HelloWorld」プログラムである例1.12を機能させようとしています。これはコードです:-
open System.Drawing;;
open System.Windows.Forms;;
type HelloWindow() =
let frm = new Form(Width = 400, Height = 140)
let fnt = new Font("Times New Roman", 28.0f)
let lbl = new Label(Dock = DockStyle.Fill, Font = fnt,
TextAlign = ContentAlignment.MiddleCenter)
do frm.Controls.Add(lbl)
member x.SayHello(name) =
let msg = "Hello" + name + "!"
lbl.Text <- msg
member x.Run() =
Application.Run(frm);;
let hello = new HelloWindow();;
hello.SayHello("you");;
hello.Run();;
残念ながら、これはエラーをスローします-「単一のスレッドで2番目のメッセージループを開始することは有効な操作ではありません。」したがって、明らかにウィンドウが開いていて終了していないことがあり、それがプログラムを混乱させています。エラーを修正する方法がわかりません。誰か助けてもらえますか?
また、最終的なコードブロックを次のように入力してみました:-
let hello = new HelloWindow()
hello.SayHello("you")
hello.Run();;
しかし、それは役に立ちません。コードは正常に実行されますが、最後の行がコメント化された結果は生成されません。