FSharp.Charting中的非阻塞Chart.Show

时间:2016-09-04 20:19:38

标签: asynchronous f# fsharpchart

使用来自.fs程序的FSharp.Charting,当显示绘图时,它会阻止程序其余部分的执行。有没有办法生成非阻塞图表?例如。我希望以下两个显示在单独的窗口中,并且还要执行程序的其余部分。

hashF

1 个答案:

答案 0 :(得分:0)

您能否提供有关如何致电Chart.Line的详细信息?例如。在REPL中,通过FSLab,在winforms中,在wpf?

以下在使用fsx文件时不会阻止我。另一种方法是将它包装在异步块中,如果您正在进行一些长时间运行的计算或访问数据库,这将非常有用。

#load @"..\..\FSLAB\packages\FsLab\FsLab.fsx"
open Deedle
open FSharp.Charting
open System

let rnd = System.Random()
let xs = List.init 100 (fun _ -> rnd.NextDouble() - 0.5)
let xs' =  List.init 100 (fun _ -> rnd.NextDouble() - 0.5)

Chart.Line(xs) // |> Chart.Show 
Chart.Line(xs') //|> Chart.Show

添加

async {Chart.Line(xs)  |> Chart.Show } |> Async.Start 
async {Chart.Line(xs') |> Chart.Show } |> Async.Start

MS DocsF# Fun&Profit

已编译示例:

open System
open FSharp.Charting
open System.Threading
open System.Threading.Tasks
open System.Drawing
open FSharp.Charting
open FSharp.Charting.ChartTypes



[<STAThread>]
[<EntryPoint>]
let main argv = 
    let rnd = System.Random()
    let xs = List.init 100 (fun _ -> rnd.NextDouble() - 0.5)
    let xs' =  List.init 100 (fun _ -> rnd.NextDouble() - 0.5)


    Chart.Line(xs)  |> Chart.Show 
    printfn "%A" "Chart 1"
    Chart.Line(xs') |> Chart.Show
    printfn "%A" "Chart 2"

    async {Chart.Line(xs)  |> Chart.Show } |> Async.Start 
    printfn "%A" "Chart 3"
    async {Chart.Line(xs') |> Chart.Show } |> Async.Start
    printfn "%A" "Chart 4"
    Console.Read() |> ignore
    printfn "%A" argv
    0 // return an integer exit code