c# - 在单击事件功能上更改按钮内容不起作用c#
问题描述
Sooo 我的问题如下,我在按钮单击事件上运行一个函数,我想简单地更改按钮内容以向最终用户显示东西正忙于加载但在函数中运行一些代码也会使其变得“无响应”一种方式,我做了一些研究并尝试async void
并await
没有工作,这是我的代码示例:
private void Clicked_Example(object sender, RoutedEventArgs e)
{
button1.Content = "Loading..."; //I need this to be shown before proceeding...
//Sooo here I am running some MySQL queries and Mqtt messages and... uhhm well the random usual stuff...
button1.Content = "Done!"; //I need this then to be changed after
}
遗憾的是,我在从线程更新 UI 方面经验不足。请任何帮助将不胜感激,谢谢!
解决方案
您正在 UI 线程上运行查询,这会阻止 UI 线程绘制您的更新。您需要将查询放在后台线程上。有很多方法可以做到这一点。使用async
/ await
withTask
是一种简单的方法:
private async void Clicked_Example(object sender, RoutedEventArgs e)
{
button1.Content = "Loading...";
await Task.Run(() =>
{
// run your queries here, but do not update your UI within this block
}
);
button1.Content = "Done!";
}
推荐阅读
- postgresql - 如何在 Google Cloud SQL PostgreSQL 实例中配置 pg_trgm 相似度阈值参数
- typescript - TypeScript 和 Cypress 无法在自定义 cypress 命令中返回 true/false
- javascript - 查找嵌套数组的对象子对象的长度
- javascript - 如何在反应js中单击添加活动类
- python - 错误是: PermissionError: [Errno 13] Permission denied: 'C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\IP.PY'
- python - 解决错误 django-oauth-toolkit: raise AppRegistryNotReady("Models are not loaded yet.")
- stripe-payments - 在特定日期后取消条带订阅
- regex - 验证字符串 # 后跟数字,但 # 在每次出现后增加
- android - 应用程序 android 无法在 USB OTG 中播放带有视频的视频
- javascript - 我如何在 javascript 中从这些数据中获取 optional_customization