是否有可能在WinForms中像我們在Windows 8上的Metro應用程序中那樣執行異步內容?Windows窗體中的異步
例如:
protected async void Something()
{
await FileIO.Something();
}
會真正冷靜地在的WinForms。
是否有可能在WinForms中像我們在Windows 8上的Metro應用程序中那樣執行異步內容?Windows窗體中的異步
例如:
protected async void Something()
{
await FileIO.Something();
}
會真正冷靜地在的WinForms。
是的。
Async是一種C#5.0語言功能,只要您具有支持的BCL類型(.Net 4.5或來自NuGet的Microsoft.Bcl.Async),就可以在任何地方工作。
但是,除了事件處理程序,您絕不應在任何地方寫入async void
。
非常感謝您的回答。 – jAsOn
是的,您可以在winform中使用async-await獲取異步UI。 您必須在事件處理程序中使用Tast.Run方法啓動異步任務,而無需等待它。 要訪問任何控件屬性或方法,您必須使用Control.Invoke方法將其轉換爲主線程。
最後,使用這種方法,ui保持活躍狀態,並且可以在previus代碼運行時處理其他事件。那麼你必須編寫代碼來禁用啓用按鈕或其他事件處理,而代碼正在運行
這是*建*做到這一點。這是首先實現此功能的主要原因之一。 – Servy
@Servy:他顯然認爲它是爲WinRT構建的。 – SLaks
@Servy,我認爲你可以做到這一點,但我從來沒有見過任何代碼示例,人們在他們的WinForms代碼中使用了異步/等待。當然,這是非常新的,但仍然;我原以爲會有大量的新代碼與WinForms的async/await聯機。所以這就是讓我質疑它是否真的可行/好的做法。 – jAsOn