更改click事件函数上的按钮内容不起作用c#
所以我的问题如下,我在button click event上运行一个函数,我想简单地更改按钮内容,向最终用户显示东西正在忙着加载,但在函数中运行一些代码也会使它在某种程度上变得“无响应”,我做了一些研究,尝试了更改click事件函数上的按钮内容不起作用c#,c#,wpf,C#,Wpf,所以我的问题如下,我在button click event上运行一个函数,我想简单地更改按钮内容,向最终用户显示东西正在忙着加载,但在函数中运行一些代码也会使它在某种程度上变得“无响应”,我做了一些研究,尝试了async void和await但没有成功,这是我的代码示例: private void Clicked_Example(object sender, RoutedEventArgs e) { button1.Content = "Loading...";
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线程绘制更新。您需要将查询放在后台线程上。有很多方法可以做到这一点。将
异步
/等待
与任务
一起使用是一种简单的方法:
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!";
}
您正在UI线程上运行查询,这会阻止UI线程绘制更新。您需要将查询放在后台线程上。有很多方法可以做到这一点。将
异步
/等待
与任务
一起使用是一种简单的方法:
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!";
}
哦,太好了!我以前把async/Wait都弄错了,我犯了一些不必要的错误,现在可以正常工作了,谢谢@Killoyabstergo:需要预先警告的是,由于执行
任务,您在运行的代码中所做的任何操作。Run
调用可以在UI中执行任何操作(例如,不要运行一个查询,更新UI中的某些内容,然后继续执行另一个查询)。只有UI线程可以使用UIHanks来获取提示!哦,太好了!我以前把async/Wait都弄错了,我犯了一些不必要的错误,现在可以正常工作了,谢谢@Killoyabstergo:需要预先警告的是,由于执行任务,您在运行的代码中所做的任何操作。Run
调用可以在UI中执行任何操作(例如,不要运行一个查询,更新UI中的某些内容,然后继续执行另一个查询)。只有UI线程可以使用UIHanks来获取提示!