2016-09-04 3 views
1

Использование FSharp.Charting из программы .fs, когда отображается график, он блокирует выполнение остальной части программы. Есть ли способ генерировать неблокирующие диаграммы? Например. Я хотел бы, чтобы оба изображения отображались в отдельных окнах, а также выполнялась остальная часть программы.Неблокирующая диаграмма. Показ в FSharp.Charting

Chart.Line(Series1) |> Chart.Show // Chart 1 
// do some work 
Chart.Line(Series2) |> Chart.Show // display this in a second window 
// continue executing the rest while the above windows are still open. 
+0

Я добавил пример, который может быть скомпилирован. В идеале было бы целесообразно поместить диаграммы в некоторый пользовательский интерфейс (например, winforms или WPF). – s952163

ответ

1

Можете ли вы предоставить более подробную информацию о том, как вы звоните 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 
+0

Не в REPL. Это скомпилированная программа. –

+1

@professorbigglesworth, то определенно async - это путь. – s952163

 Смежные вопросы

  • Нет связанных вопросов^_^