我已经使用过Task
类型。当Task
不返回任何内容时,一切都很好。例如:
XAML:
<Button Name="_button"
Click="ButtonBase_OnClick">
Click
</Button>
CodeBehind:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
_button.IsEnabled = false;
Task.Factory.StartNew(() =>
{
Thread.Sleep(5*1000);
Dispatcher.Invoke(new Action(() => _button.IsEnabled = true));
});
}
这个工作正常。但是我想让 Task
返回一些值,例如 Boolean
。因此我需要使用 Task<Boolean>
:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
_button.IsEnabled = false;
var task = Task<Boolean>.Factory.StartNew(() =>
{
Thread.Sleep(5*1000);
return true;
});
if (task.Result)
_button.IsEnabled = true;
}
这里涉及到UI阻塞的问题。UI线程会被锁定直到任务返回结果。
_button.IsEnabled = false;
那么,上面的字符串完全被忽略了。
我使用的是.Net 4.0
,所以无法使用async/await
方法。
这个问题真的让我很烦恼... 它有解决方案吗?
async/await
,使生活更加轻松:) - Sriram Sakthivel