用于更新ui的异步方法部分执行

我正在使用xamarin开发一个android应用程序,而我试图做的事情却非常简单:单击一个按钮,将其禁用1秒钟。

这是我编写的代码的相关部分:

protected override void OnCreate(Bundle savedInstanceState)
{
//...
        sendShortDataButton.Click += (object sender,EventArgs e) => {
                Task.Run(() => DisableButtonFor());               
            };
//...
        private async Task DisableButtonFor()
        {
            sendShortDataButton.Enabled = false; //<------
            await Task.Delay(1000);
            sendShortDataButton.Enabled = true;
        }
}

这里的问题是,通过调试应用程序,代码仅运行到箭头指向所有内容之后的位置而被忽略。在该应用程序上,该按钮实际上已被禁用,因此我不确定到底出了什么问题。

谢谢!

zhangjuntu 回答:用于更新ui的异步方法部分执行

尝试一下:

sendShortDataButton.Click += async (sender,e) =>
{
    var button = (Button)sender;
    button.Enabled = false;
    await Task.Delay(1000);
    button.Enabled = true;
};

如果您仅有的异步工作是等待Task.Run,则您不需要Task.Delay。但是,如果您还有更多异步工作要做,那么最好仅将Task.Run用于这项工作:

sendShortDataButton.Click += async (sender,e) =>
{
    var button = (Button)sender;
    button.Enabled = false;
    await Task.Run(async () =>
    {
        await Task.Delay(1000); // Simulate async work
    });
    button.Enabled = true;
};
本文链接:https://www.f2er.com/3129030.html

大家都在问