Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 在FSI中正确运行的代码不会';项目运行时无法正确运行_F# - Fatal编程技术网

F# 在FSI中正确运行的代码不会';项目运行时无法正确运行

F# 在FSI中正确运行的代码不会';项目运行时无法正确运行,f#,F#,我是一个不折不扣的人,学习曲线一直很陡峭,主要是因为我不明白为什么事情不起作用 下面是一些简单的代码,用于更新在FSI中工作的进度条(减去Application.Run行) 开放系统 打开System.Windows.Forms 开放系统.绘图 开放系统。线程 让表单=新表单(最顶层=真,可见=真) 设pb=new ProgressBar(最小值=0,最大值=15,Dock=DockStyle.Fill) 表单.控件.添加(pb) 设threadfunc()= 线程。睡眠(5000) 对于i=0

我是一个不折不扣的人,学习曲线一直很陡峭,主要是因为我不明白为什么事情不起作用

下面是一些简单的代码,用于更新在FSI中工作的进度条(减去Application.Run行)

开放系统
打开System.Windows.Forms
开放系统.绘图
开放系统。线程
让表单=新表单(最顶层=真,可见=真)
设pb=new ProgressBar(最小值=0,最大值=15,Dock=DockStyle.Fill)
表单.控件.添加(pb)
设threadfunc()=
线程。睡眠(5000)
对于i=0到15 do
线程。睡眠(1000)
pb.Invoke(操作(乐趣)->pb.Value忽略
let thread=新线程(threadfunc)
thread.Start()
[]
执行应用程序运行(表单)

这段代码会绘制一个带有进度条的窗口,该进度条不会更新,然后在我尝试构建项目并从调试器运行它时崩溃。

我不确定为什么会这样,但请尝试添加
应用程序。EnableVisualStyles()
在创建表单之前。

当我构建它时,它运行良好,但在退出时崩溃,因为ProgressBar在被释放后会被访问。在我的系统上,进度条可以从FSI进行良好更新。从VS10开始,进度条永远不会出现问题,或者变为蓝色。出于这种原因,我发现WPF比WinForms好得多。
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)