是否可以在不显示控制台窗口的情况下运行f#脚本?

时间:2012-04-11 06:48:17

标签: winforms f# f#-interactive

我有一个使用Windows窗体的f#脚本,我希望它在不显示控制台窗口(fsi.exe)的情况下运行。有可能吗?怎么样?下面是一个脚本示例。 Console window screenshot

#r "mscorlib.dll"
#r "System.dll"

open System.IO
open System.Windows.Forms

let DoUsefulThing() = ()

let form = new Form()
let button = new Button(Text = "Do useful thing")
button.Click.AddHandler(fun _ _ -> DoUsefulThing())

form.Controls.Add(button)
form.ShowDialog()

3 个答案:

答案 0 :(得分:10)

作为一个选项,您可以PInvoke并隐藏控制台窗口

#r "mscorlib.dll"
#r "System.dll"

open System.IO
open System.Windows.Forms

module FSI =
    [<System.Runtime.InteropServices.DllImport("user32.dll")>]
    extern bool ShowWindow(nativeint hWnd, int flags)
    let HideConsole() = 
        let proc = System.Diagnostics.Process.GetCurrentProcess()
        ShowWindow(proc.MainWindowHandle, 0)

FSI.HideConsole()

let DoUsefulThing() = ()


let form = new Form()
let button = new Button(Text = "Do useful thing")
button.Click.AddHandler(fun _ _ -> DoUsefulThing())

form.Controls.Add(button)
form.ShowDialog()

答案 1 :(得分:5)

这类任务的真正答案不是使用fsc并编译为.exe而不会显示控制台窗口。

我认为fsi不是为你想做的事而设计的

答案 2 :(得分:0)

我猜你想要运行F#可执行文件而不是脚本。在这种情况下,使用Visual Studio(我使用2017年)创建F#控制台应用程序,并在Project =&gt; Properties将Output Type设置为Windows Application(将编译器目标设置为winexe)。