【问题标题】:how to make changes appear instantly in the user interface?如何使更改立即出现在用户界面中?
【发布时间】:2020-06-30 02:39:57
【问题描述】:

对不起我的英语不好。我是 xamarin android 的新手,尝试在用户界面中进行更改时遇到问题。 例如,上次我尝试在单击按钮时更改按钮的背景。但这直到 click 方法结束时才会发生。

    private void MainActivity_Click(object sender, EventArgs e)
    {

        ((Button)(sender)).SetBackgroundResource(Resource.Drawable.background);

        //other code to run

    }

我尝试在 RunOnUiThread 和 BeginInvokeOnMainThread 中执行此操作,但也没有成功。 调试时,我发现它实际上立即进行了更改,但它没有出现在应用程序上 直到方法完成。还有一个事件,当按钮状态被按下=true,并且按钮即使在释放后仍然保持突出显示,它就像这样卡住直到方法 MainActivity_Click 结束。 再次为我糟糕的英语感到抱歉。解决方案?

【问题讨论】:

  • 单独的代码不会导致 UI 更改并尝试在非 UI 线程/任务上运行它们。这是响应式 UI 的唯一方法
  • 我对xamarin了解不多,但是android UI只有在主线程重绘时才会改变。只有当线程没有被阻塞时才会发生这种情况。
  • 您需要更加关注这个问题。太笼统了。尝试按照教程进行操作,并在获得后提供一个最低限度的工作示例,并且错误仍然存​​在。

标签: c# multithreading visual-studio user-interface xamarin.android


【解决方案1】:

您的“其他要运行的代码”似乎阻塞了线程,您可以尝试使用异步任务来处理这些耗时的操作。

试试下面:

private void MainActivity_Click(object sender, EventArgs e)
{

    ((Button)(sender)).SetBackgroundResource(Resource.Drawable.background);

    DoAsyncTask();

}


public async void DoAsyncTask()
{

  await Task.Run(() =>
   {
     //other code to run
   });

}

你可以看看Asynchronous programming

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多