2011-03-17 111 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