2011-03-17 100 views
1

我是F#noob,學習曲線一直很陡,主要是因爲不理解爲什麼事情不起作用。在FSI中運行正確的代碼在運行項目時無法正確運行

下面是一些簡單的代碼,用於更新FSI中的進度條(減去App​​lication.Run行)。

open System 
open System.Windows.Forms 
open System.Drawing 
open System.Threading 

let form = new Form(TopMost = true, Visible=true) 

let pb = new ProgressBar(Minimum = 0, Maximum = 15, Dock = DockStyle.Fill) 
form.Controls.Add(pb) 

let threadfunc() = 
    Thread.Sleep(5000) 
    for i = 0 to 15 do 
     Thread.Sleep(1000) 
     pb.Invoke(Action(fun _ -> pb.Value <- i)) |> ignore 

let thread = new Thread(threadfunc) 
thread.Start() 

[<STAThread>] 
do Application.Run(form) 

此相同的代碼drawws一個進度條,不更新的窗口,然後崩潰,當我嘗試建立的項目,並從調試器中運行。

+0

當我構建它時運行良好,但它在退出時崩潰,因爲ProgressBar在處置後被訪問。 – 2011-03-17 07:56:19

+0

在我的系統上,進度條從FSI更新得很好。從VS10開始,進度條永不消退,或變爲藍色。 – Chuck 2011-03-17 07:59:40

+0

FWIW,由於這種原因,我發現WPF比WinForms好很多。 – 2011-03-19 22:45:41

回答

0

我不確定這是爲什麼可行,但在創建表單之前嘗試添加Application.EnableVisualStyles()

+0

Tihs做到了。你是對的。沒有多大意義。 – Chuck 2011-03-17 22:14:52