我已经编写了一个示例.net win表单应用程序来学习 async / await concept。
我的示例获胜表格有2个按钮[button1,button2],以及下方 是两者的点击事件处理程序。
private async void button1_Click(object sender, EventArgs e)
{
string str = await BL.LongRunningOperation();
MessageBox.Show(str);
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Any Time");
}
下面是长时间运行的操作,它在click事件上被调用 button1
public class BL
{
public static async Task<string> LongRunningOperation()
{
string strReturnValue = "Long Running Operation";
int i = 0;
while (i <= 1000000000)
{
i++;
}
return strReturnValue;
}
}
我的假设是用户点击了长时间运行的Button1 操作将异步执行,同时也是用户执行 可以点击button2。
但我观察到的是,用户只能点击button2一次 长时间运行完成。
请让我知道需要修改哪些内容才能使此调用异步。
答案 0 :(得分:6)
您的LongRunningOperation
实际上并没有异步执行任何操作,因此它不会在另一个线程上运行并返回到单击处理程序。应该有一个编译器警告,因为async
方法中没有await
。
正如其他答案所建议的那样,写下你的点击处理程序:
private async void button1_Click(object sender, EventArgs e)
{
string str = await Task.Run(() => BL.LongRunningOperation());
MessageBox.Show(str);
}
答案 1 :(得分:3)
因为您的示例是同步执行,因此您可以尝试将长时间运行的操作体包装在
中<TextBox Text="{Binding PageContent, UpdateSourceTrigger=PropertyChanged}" />