2016-09-04 7 views
1

.fsプログラムからFSharp.Chartingを使用すると、プロットが表示されたときに残りのプログラムの実行がブロックされます。非ブロッキングチャートを生成する方法はありますか?例えば。次の両方を別々のウィンドウに表示し、プログラムの残りの部分を実行するようにしたいと思います。ノンブロッキングChart.Show in 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

私はコンパイルすることができる例を追加しました。理想的には、チャートをいくつかのUI(winformsやWPFなど)に配置するのが理にかなっています。 – s952163

答えて

1

Chart.Lineに電話する方法の詳細はありますか?例えば。 REPLで、FSLab経由で、winformsで、wpfで?

以下は、fsxファイルで作業しているときに私をブロックしません。もう1つの方法は、非同期ブロックでラップすることです。これは、長期間の計算やデータベースへのアクセスを行う場合に便利です。

#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 
+0

REPLにはありません。それはコンパイルされたプログラムです。 –

+1

@professorbigglesworth間違いなく非同期が行く方法です。 – s952163

関連する問題