2016-11-24 3 views
2

次のコード行を実行する前に、プログラムを10秒間スリープさせるさまざまな方法で試しています。次の操作を実行する前にx秒間スリープします

this.SetContentView (Resource_Layout.Main) 
let timer = new System.Timers.Timer(10000.0) 
async{do timer.Start()} 
this.SetContentView (Resource_Layout.next) 

解決方法はありません。

+0

'Async.sleep'を試しましたか? –

+0

おそらく私はそれを正しく使用していません。 'Async.Sleep(10000)'は私にタイプの不一致を与える – Nulle

+1

http://fsharpforfunandprofit.com/posts/concurrency-async-and-parallel/ –

答えて

4

あなたはasyncではなくに(タイマーを作成し、タイマーのイベントハンドラでコンテンツビューを設定する)、より直接的な方法を使用したい場合は、あなたがこのような何かが必要です。

this.SetContentView (Resource_Layout.Main) 
async{ 
    do! Async.Sleep(10000.0) 
    this.SetContentView (Resource_Layout.next) } 
|> Async.StartImmediate 

キーポイント:あなたは、asyncSetContentViewコールを移動することによって、それを非同期計算

  • の実行をブロックすることができdo! Async.Sleepを使用

    • Async.StartImmediateを使用すると、ワークフローが開始され、残りの計算が同じスレッドコンテキストで実行されます(UIスレッドで実行され、コードがアクセスできることを確認します) UI要素)。
  • 関連する問題