WPF轻松实现进度条的示例代码

 更新时间:2024年12月05日 09:17:09   作者:小码编匠  
WPF中的ProgressBar控件用于表示任务进度,适用于文件下载、数据处理等场景,本文将通过XAML和C#代码展示如何创建一个基本的WPF进度条,并演示如何通过事件处理程序更新进度条的值来模拟耗时操作,感兴趣的小伙伴跟着小编一起来看看吧

前言

本文讲述如何在软件启动和窗体按钮操作时弹出进度条。

运行环境:Win10、VS2022

一、新建WPF项目

二、新建WPF窗体。

1、新建窗体,取名DefProcessBar.xaml。

2、设置窗体属性、样式。

<Window x:Class="WpfApp4.DefProcessBar"
        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:WpfApp4"
        mc:Ignorable="d"
        Title="DefProcessBar" Width="300" Height="50"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None" AllowsTransparency="True" Background="Transparent" ShowInTaskbar="False" ResizeMode="NoResize">

2.1、WindowStartupLocation="CenterScreen"是窗体在屏幕中间显示;

2.2、WindowStyle="None"是不要窗体顶部内容;

2.3、AllowsTransparency="True"是允许窗体透明;

2.4、Background="Transparent"是设置透明背景;

2.5、ShowInTaskbar="False"是指示此窗口是否出现在任务栏;

2.6、ResizeMode="NoResize"是不可调节窗体大小。

3、添加进度消息和进度条。

<Grid.RowDefinitions>
    <RowDefinition Height="25"></RowDefinition>
    <RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>

<TextBlock Grid.Row="0" Name="txtTitle" FontSize="16" Foreground="Yellow" HorizontalAlignment="Left" TextWrapping="Wrap" Margin="10, 0,0,0"></TextBlock>
<ProgressBar Grid.Row="1" x:Name="progressBar" Maximum="100" Height="25" Width="300" Foreground="Green" Background="LightGray" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>

4、添加 DefProcessBar.xaml.cs 代码

/// <summary>
/// DefProcessBar.xaml 的交互逻辑
/// </summary>
public partial class DefProcessBar : Window
{
    public DefProcessBar()
    {
        InitializeComponent();
    }

    public void ShowProcess(int process, string title = "")
    {
        progressBar.Dispatcher.Invoke(() =>
        {
            this.txtTitle.Text = title;
            this.progressBar.Value = process;
        });
    }

    public void SetProcess(DefProcessBar defProcessBar, int process, string title = "")
    {
        if (process > 100)
        {
            process = 100;
        }
        else if (process < 0)
        {
            process = 0;
        }
        title += $" ({process}%)";
        defProcessBar.ShowProcess(process, title);
    }
}

三、在 App.xaml.cs 中使用

/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;

        bool isFinish = false;

        //DialogWait defProcessBar = new DialogWait();
        DefProcessBar defProcessBar = new DefProcessBar();
        Task.Run(() =>
        {
            defProcessBar.SetProcess(defProcessBar, 20, "启动中,请稍后...");        // 写入实际处理代码
            Thread.Sleep(500);
            defProcessBar.SetProcess(defProcessBar, 40, "启动中,请稍后...");
            Thread.Sleep(500);
            defProcessBar.SetProcess(defProcessBar, 60, "启动中,请稍后...");
            Thread.Sleep(500);
            defProcessBar.SetProcess(defProcessBar, 80, "启动中,请稍后...");
            Thread.Sleep(500);

            defProcessBar.Dispatcher.Invoke(() =>
            {
                defProcessBar.Close();
            });
        });
        defProcessBar.ShowDialog();

        if (isFinish)
        {
            base.OnStartup(e);
            Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
        }
        else
        {
            this.Shutdown();
        }
    }
}

启动软件查看效果。

四、在主窗体 MainWindow 中弹出进度条。

1、添加按钮。

2、添加按钮事件处理。

private void Button_Click(object sender, RoutedEventArgs e)
{
    DefProcessBar defProcessBar = new DefProcessBar();
    Task.Run(() =>
    {
        defProcessBar.SetProcess(defProcessBar, 20, "启动中,请稍后...");
        Thread.Sleep(500);
        defProcessBar.SetProcess(defProcessBar, 40, "启动中,请稍后...");
        Thread.Sleep(500);
        defProcessBar.SetProcess(defProcessBar, 60, "启动中,请稍后...");
        Thread.Sleep(500);
        defProcessBar.SetProcess(defProcessBar, 80, "启动中,请稍后...");      //写入实际处理代码
        Thread.Sleep(500);

        defProcessBar.Dispatcher.Invoke(() =>
        {
            defProcessBar.Close();
        });
    });
    defProcessBar.ShowDialog();
}

3、效果跟软件启动时一样。

缺点:所有逻辑必须放到异步处理。

最后

以上就是WPF轻松实现进度条的示例代码的详细内容,更多关于WPF实现进度条的资料请关注脚本之家其它相关文章!

相关文章

  • WPF实现倒计时转场动画效果

    WPF实现倒计时转场动画效果

    这篇文章主要介绍了如何利用WPF实现倒计时转场动画效果,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-08-08
  • C#之Expression表达式树实例

    C#之Expression表达式树实例

    这篇文章主要介绍了C#之Expression表达式树,包括了表达式树的原理与用法技巧,需要的朋友可以参考下
    2014-10-10
  • C# Newtonsoft.Json用法详解

    C# Newtonsoft.Json用法详解

    本文主要介绍了C# Newtonsoft.Json用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C#最简单的关闭子窗体更新父窗体的实现方法

    C#最简单的关闭子窗体更新父窗体的实现方法

    原理就是将子窗体最为对话框模式弹出,当窗体关闭或取消时更新主窗体
    2012-11-11
  • C#控制台输出进度和百分比的实例代码

    C#控制台输出进度和百分比的实例代码

    C#控制台输出进度和百分比的实例代码,需要的朋友可以参考一下
    2013-03-03
  • C#实现将XML数据自动化地写入Excel文件

    C#实现将XML数据自动化地写入Excel文件

    在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以了解下
    2025-12-12
  • C#封装一个快速读取写入操作excel的工具类

    C#封装一个快速读取写入操作excel的工具类

    这篇文章主要为大家详细介绍了C#如何封装一个快速读取写入操作excel的工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C#基于QRCode实现动态生成自定义二维码图片功能示例

    C#基于QRCode实现动态生成自定义二维码图片功能示例

    这篇文章主要介绍了C#基于QRCode实现动态生成自定义二维码图片功能,结合实例形式分析了C#使用QRCode动态生成二维码图片相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • C#窗体实现点餐系统

    C#窗体实现点餐系统

    这篇文章主要为大家详细介绍了C#窗体实现点餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 使用Spire.PDF在C#中创建和绘制PDF表单的方法步骤

    使用Spire.PDF在C#中创建和绘制PDF表单的方法步骤

    在日常开发中,我们经常需要处理各种文档,其中PDF因其跨平台、安全性高而成为企业级应用中不可或缺的一部分,然而,手动创建、填写或管理PDF表单无疑是一项耗时且易出错的任务,所以本文给大家介绍了如何使用Spire.PDF在C#中创建和绘制 PDF 表单,需要的朋友可以参考下
    2025-08-08

最新评论