2013-08-27 42 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代碼運行時處理其他事件。那麼你必須編寫代碼來禁用啓用按鈕或其他事件處理,而代碼正在運行