【问题标题】: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()
    {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多