【发布时间】:2016-02-13 19:19:55
【问题描述】:
我试图找出下面的代码有什么问题。我认为使用 async 和 await 可以让我忘记诸如冻结之类的 GUI 问题,因为一些长代码阻塞了主线程。
单击按钮后,GUI 一直响应,直到调用longRunningMethod,如下所示:
private async void openButton_Click(object sender, RoutedEventArgs e)
{
//doing some usual stuff before calling downloadFiles
Task<int> result = await longRunningMethod(); // async method
//at this point GUI becomes unresponsive
//I'm using the result here, so I can't proceed until the longRunningMethod finishes
}
在方法完成之前我无法继续,因为我需要result。为什么这段代码会冻结我的应用?
【问题讨论】:
-
longRunningMethod()的内部可能因为没有正确使用async/await而阻塞了 UI 线程 -
@Adwaenyth 这根本不是真的。 IO 绑定操作不需要新线程来停止阻塞 UI。
-
我注意到您没有返回 Task
。 longRunningMethod 是否启动新任务? -
@DanielKelley 猜测它不是在方法中运行的 IO 绑定操作。
-
@user4205580 你能详细介绍一下
longRunningMethod()里面的内容吗?
标签: c# wpf async-await