Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改click事件函数上的按钮内容不起作用c#_C#_Wpf - Fatal编程技术网

更改click事件函数上的按钮内容不起作用c#

更改click事件函数上的按钮内容不起作用c#,c#,wpf,C#,Wpf,所以我的问题如下,我在button click event上运行一个函数,我想简单地更改按钮内容,向最终用户显示东西正在忙着加载,但在函数中运行一些代码也会使它在某种程度上变得“无响应”,我做了一些研究,尝试了async void和await但没有成功,这是我的代码示例: private void Clicked_Example(object sender, RoutedEventArgs e) { button1.Content = "Loading...";

所以我的问题如下,我在button click event上运行一个函数,我想简单地更改按钮内容,向最终用户显示东西正在忙着加载,但在函数中运行一些代码也会使它在某种程度上变得“无响应”,我做了一些研究,尝试了
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来获取提示!