如何使更改立即出现在用户界面中?

Posted

技术标签:

【中文标题】如何使更改立即出现在用户界面中?【英文标题】: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只有在主线程重绘时才会改变。只有当线程没有被阻塞时才会发生这种情况。 您需要更加关注这个问题。太笼统了。尝试按照教程进行操作,并在获得后提供一个最低限度的工作示例,并且错误仍然存​​在。 【参考方案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

【讨论】:

以上是关于如何使更改立即出现在用户界面中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在某人更改密码后使用户的 JWT 令牌无效

linux下使环境变量立即生效的几种方法

ASP.Net Core - 登录后如何等待用户身份立即可用?

如何强制网格在更改时立即将值传播到数据源?

如何使 UITableViewCell 上的 UIProgressView 立即更改?

postgres:在用户首次登录时强制更改密码