在Thread中实现asnyc方法

时间:2018-05-07 09:37:07

标签: c# xamarin xamarin.forms

我正在使用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");
 }

1 个答案:

答案 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);
}