【问题标题】:How to use progress bar in wpf without multithreading? [closed]如何在没有多线程的情况下在 wpf 中使用进度条? [关闭]
【发布时间】:2020-02-20 14:02:08
【问题描述】:
请帮忙。
我想在从数据库中读取时使用 IsIndeterminate=true 属性查看进度条的变化。
我知道我可以使用 Task 和 BackgroundWorker 来创建另一个线程。但对我来说,很重要的一点是,我不会在完成之前离开进行长期操作的方法。在这种情况下可以做什么?
附:对不起我的英语:)
【问题讨论】:
标签:
c#
wpf
task
progress-bar
backgroundworker
【解决方案1】:
你不能。 UI 线程需要运行以显示对进度条的更改,同时您的方法正在运行。
在后台线程中运行您的方法,但在开始之前禁用窗口中的所有内容,以便用户无法更改任何内容,并将鼠标指针设置为沙漏,以免他们尝试。
使用 try/catch/finally 在最后重新启用所有内容并重置鼠标指针。
【解决方案2】:
等待任务后,执行返回到您启动任务的方法。这可能就是您所需要的,因为该方法实际上并不是“左”。
这是一个示例 Button Click 事件处理程序,它在等待可等待的方法调用(例如,一些长时间运行的操作)之前禁用自身,并在调用完成后再次启用:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
button.IsEnabled = false;
await SomethingAsync();
button.IsEnabled = true;
}
private Task SomethingAsync()
{
// ...
}