WPF中实现弹出进度条窗口的示例详解

 更新时间:2024年11月25日 10:16:27   作者:Ritchie.Lee  
这篇文章主要为大家详细介绍了如何WPF中实现弹出进度条窗口,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

实现功能

模拟一个任务开始执行,在窗口弹出一个进度条,展示执行进度,执行完成弹出提示框。例如做数据查询时,如果查询需要一段时间,操作人员可以很好的知道是否查询完成。

1. 设计进度条弹出窗口

进度条窗口样式设计 XAML

<Window x:Class="WpfApp.ProgressBarWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None"
        ResizeMode="NoResize"
        AllowsTransparency="True"
        Topmost="True"
        Title="ProgressBarWindow" Height="100" Width="800">
    <Grid>
        <ProgressBar Margin="5" x:Name="progressBar1"
                     HorizontalAlignment="Stretch"
                     Height="90"
                     VerticalAlignment="Center"
                     DataContext="{Binding}"
                     Value="{Binding Progress}"
                     Foreground="LightGreen"
                     >
            
        </ProgressBar>
    </Grid>
</Window>

进度条窗口后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
 
namespace WpfApp
{
    /// <summary>
    /// ProgressBarWindow.xaml 的交互逻辑
    /// </summary>
    public partial class ProgressBarWindow : Window
    {
        public ProgressBarWindow()
        {
            InitializeComponent();
            DataContext = new ProgressViewModel(this);
        }
    }
}

2.创建进度条视图模型ProgressViewModel

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
 
namespace WpfApp
{
    public class ProgressViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
 
        private Window myWindow;
        public ProgressViewModel(Window wnd)
        {
            myWindow = wnd;
        }
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
 
        private int _progress;
        public int Progress
        {
            get { return _progress; }
 
            set
            {
                _progress = value;
 
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Progress)));
                if (_progress == 100)
                {
                    // 关闭进度窗口
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        myWindow.Close();
 
                    });
                }
            }
        }
    }
}

3. 创建测试主窗口

主窗口XAML设计:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="250" Width="400">
    <Grid>
        <Button x:Name="btnTest" FontSize="18" Click="btnTest_Click" Margin="10 30  10 30">开始任务...</Button>
    </Grid>
</Window>

主窗口后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
 
        private static ProgressBarWindow pgbWindow;
 
        private async void btnTest_Click(object sender, RoutedEventArgs e)
        {
 
            // 创建进度窗口
            pgbWindow = new ProgressBarWindow();
            pgbWindow.Show();
 
            // 模拟耗时任务
            await Task.Run(() =>
            {
                for (int i = 0; i <= 100; i++)
                {
                    pgbWindow.Dispatcher.Invoke(() =>
                    {
                        pgbWindow.progressBar1.Value= i;
                        Console.WriteLine(i);
                        
                    });
                    System.Threading.Thread.Sleep(20);
                }
            });
 
 
            MessageBox.Show("任务完成!");
        }
    }
}

4. 测试验证如下

到此这篇关于WPF中实现弹出进度条窗口的示例详解的文章就介绍到这了,更多相关WPF弹出进度条窗口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • WinForm实现鼠标拖动控件跟随效果

    WinForm实现鼠标拖动控件跟随效果

    这篇文章主要为大家详细介绍了WinForm实现鼠标拖动控件跟随效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C# 单例模式的多种实现方式

    C# 单例模式的多种实现方式

    单例模式是一种确保类只有一个实例的设计模式,主要用于提供全局访问点,C#中实现单例的方法多样,包括饿汉式和懒汉式,各有优缺点,此外,单例模式不仅提高代码可重用性和可读性,还增强了系统的可维护性
    2024-11-11
  • C#实现快速排序算法

    C#实现快速排序算法

    本文详细讲解了C#实现快速排序算法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#中的char、string和StringBuilder的使用详解

    C#中的char、string和StringBuilder的使用详解

    这篇文章主要介绍了C#中的char、string和StringBuilder的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C# FileStream文件读写详解

    C# FileStream文件读写详解

    本文主要介绍C#使用 FileStream 读取数据,写入数据等操作,希望能帮到大家。
    2016-04-04
  • C# WinForms中实现MD5的加密

    C# WinForms中实现MD5的加密

    MD5(消息摘要算法第5版)是一种广泛使用的哈希函数,可以生成一个128位(16字节)的哈希值,通常用于数据完整性校验和密码存储,在Windows Forms应用程序中实现MD5加密,可以用于用户密码的安全存储和数据的完整性验证,本文将详细介绍了如何在WinForms中实现MD5加密
    2024-10-10
  • 浅析C#中goto跳转语句的用法

    浅析C#中goto跳转语句的用法

    在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,下面我们就来看看goto跳转语句的用法吧
    2024-03-03
  • c#与WMI使用技巧集

    c#与WMI使用技巧集

    c#与WMI使用技巧集...
    2007-03-03
  • C#引用类型和值类型的介绍与实例

    C#引用类型和值类型的介绍与实例

    这篇文章主要介绍了C#引用类型和值类型,有需要的朋友可以参考一下
    2013-12-12
  • C#中Linq延迟查询的例子

    C#中Linq延迟查询的例子

    这篇文章主要介绍了C#中Linq延迟查询的例子,本文用一个实例来讲解延迟查询的使用,需要的朋友可以参考下
    2015-06-06

最新评论