程序中经常遇见操作时间过长导致界面卡死的情况,幸运的是c#5.0提供了async await两个关键字执行异步操作来解决这个问题,使用也超级简单,额,对,微软大法好。
1.将按钮事件改为异步执行
private async void Button1_Click(object sender, RoutedEventArgs e)
{
//....
Label1.text=await DoSomthing(x,y);
//...
};
在按钮事件方法声明添加async关键字,在操作耗时的方法中添加await关键字;如果按钮事件中没有await则还是会使用同步方法执行。
2.改造自定义方法DoSomthing
public async Task<string> DoSomthing(string x,string y)
{
return Task.Run(()=>
{
//...
});
}
将原来方法体改造成lambda表达式,带返回值的方法返回值使用Task<T>,不带返回值使用Task,且无需return 。
好了,搞定,运行,界面不会卡死,哈,就是这么简单。