c# - C# 在不按住按钮的情况下单击按钮时运行耗时的方法
问题描述
我确实有使用 Python(GUI 平台 PyQt)进行软件开发的经验,并且正在学习 C# 软件开发。我想知道如何在 C# 中运行使用 UI 对象但保持 UI“活动”而不按下按钮的线程/任务。我确实使用“调用”方法与线程/任务共享 UI 对象并且没有调用任何连接方法,但在线程执行期间仍然按下按钮。有没有办法在后台运行此方法,但保持 GUI 响应?
提前致谢!
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Run(new Action(this.Iterate_balance));
}
private async void Iterate_balance()
{
this.Dispatcher.Invoke(() =>
{
// the rest of code
}
}
解决方案
正确使用 async/await 模式,您根本不需要 Dispatcher:
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Iterate_balance();
}
private async Task Iterate_balance()
{
button.Content = "Click to stop";
// some long async operation
await Task.Delay(TimeSpan.FromSeconds(4));
button.Content = "Click to run";
}
推荐阅读
- scala - 如何将 ReactiveMongo 流与聚合一起使用?
- php - 尝试使用php在服务器(mamp)中上传文件
- asp.net-core - 将单角色管理升级为多角色管理
- python - 在python中重置字典不能从模块中工作
- jupyter-notebook - ipyvuetify 用户输入文本字段
- node.js - 将客户电子邮件传递给条带结帐
- emeditor - 从外部 Windows potplayer 应用程序中获取 emeditor 中的文本
- java - 春季 JNDI @Resource
- javascript - 如何使用 JavaScript 在聊天中创建我的元素
- arrays - 我正在尝试以相反的顺序打印一个数组,但它说分段错误