2016-11-24 67 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

yeps。也许我没有正确使用它。 '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 

的关键点:

  • 使用do! Async.Sleep可以阻止异步计算
  • 的执行通过移动asyncSetContentView调用,它将在睡眠后发生
  • 使用Async.StartImmediate,您启动工作流 - 睡眠确保剩余的计算运行在相同的线程上下文中(这意味着它将在UI线程上运行并且代码将能够访问UI元素)。