Можете ли вы предоставить более подробную информацию о том, как вы звоните 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 Docs и F# 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
Я добавил пример, который может быть скомпилирован. В идеале было бы целесообразно поместить диаграммы в некоторый пользовательский интерфейс (например, winforms или WPF). – s952163