2013-08-27 43 views
1

是否有可能在WinForms中像我们在Windows 8上的Metro应用程序中那样执行异步内容?Windows窗体中的异步

例如:

protected async void Something() 
{ 
    await FileIO.Something(); 
} 

会真正冷静地在的WinForms。

+2

这是*建*做到这一点。这是首先实现此功能的主要原因之一。 – Servy

+1

@Servy:他显然认为它是为WinRT构建的。 – SLaks

+0

@Servy,我认为你可以做到这一点,但我从来没有见过任何代码示例,人们在他们的WinForms代码中使用了异步/等待。当然,这是非常新的,但仍然;我原以为会有大量的新代码与WinForms的async/await联机。所以这就是让我质疑它是否真的可行/好的做法。 – jAsOn

回答

4

是的。

Async是一种C#5.0语言功能,只要您具有支持的BCL类型(.Net 4.5或来自NuGet的Microsoft.Bcl.Async),就可以在任何地方工作。

但是,除了事件处理程序,您绝不应在任何地方写入async void

+0

非常感谢您的回答。 – jAsOn

0

是的,您可以在winform中使用async-await获取异步UI。 您必须在事件处理程序中使用Tast.Run方法启动异步任务,而无需等待它。 要访问任何控件属性或方法,您必须使用Control.Invoke方法将其转换为主线程。

最后,使用这种方法,ui保持活跃状态​​,并且可以在previus代码运行时处理其他事件。那么你必须编写代码来禁用启用按钮或其他事件处理,而代码正在运行