我的 Xamarin 应用有两个按钮。按钮 A 和按钮 B。两者都可以启动长时间运行的任务。我想通过将按钮文本更改为"正在工作"并在任务结束时将其更改回来来向用户表示任务正在工作。
当我单击按钮 A 时,我有代码:
btnA.Text="Working";
但这并不会导致btnA文本说"正在工作"。
如果我包含在统计按钮 A 任务的过程中:
btnB.Text="Working";
这行得通。当我做相反的事情时,即用"正在工作"更新 btnB,同时在按下按钮 B 时将 btnA 更新为"正在工作",情况恰恰相反,因为按钮 B 的文本保持不变,按钮 A 的文本更改为"正在工作"。
我试过直接设置按钮文本或使用
RunOnUiThread(() => btnA.Text = "Working");
无论哪个按钮没有按下,我都可以更新其文本,但我无法更新按下按钮的文本。
描述,您想在单击和任务完成时更改按钮文本,但我不知道您在哪里修改按钮文本,我做一个关于运行长任务并在此处更改按钮文本的示例。您可以查看是否需要您的需求。
private void Button_Clicked(object sender, EventArgs e)
{
btna.Text = "Wait";
Task.Run(() => method1());
Console.WriteLine("UI thread is not block");
}
private async void method1()
{
await Task.Run(async () =>
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("the data is {0}", i);
await Task.Delay(1000);
}
});
Console.WriteLine("the task is done!");
Device.BeginInvokeOnMainThread(() =>
{
btna.Text = "Done";
});
}
您可以看到我可以在单击时更改按钮 a 文本,也可以在长任务完成后使用 Device.BeginInvokeOnMainThread(( 更改回按钮 a