我正在使用Visual Studio 2017中的Xamarin Forms项目。我需要在线程内部实现异步方法。
启动帖子的事件
public void btnAction_Click(object sender, System.EventArgs e)
{
var load = new System.Threading.Thread((t) =>
{
ShowWarning();
});
load.Start(btnText);
}
异步方法应该在线程内部实现
private async void ShowWarning()
{
bool response = await DisplayAlert("Warning", "Please Enter
The Key","Yes","No");
}
答案 0 :(得分:3)
如果DisplayAlert
真的是异步,为什么要开始一个线程呢?您可以声明您的事件处理程序async
,并简单地说出ShowWarning
:
public async void btnAction_Click(object sender, System.EventArgs e)
{
await ShowWarning();
}
您可能希望在btnAction
之前停用await
并再次在await
之后重新启用它,这样您就可以在等待期间避免其他点击事件。
请注意,将ShowWarning
声明为async void
是不好的做法。它应该是
private async Task ShowWarning()
{ ... }
(如果是按钮事件处理程序,则可以返回async void
,否则您无法将其分配给某个事件。
如果您确实需要在其他主题上运行ShowWarning
,可以使用Task.Run()
:
public async void btnAction_Click(object sender, System.EventArgs e)
{
await Task.Run(ShowWarning);
}