当前位置: 首页 > news >正文

C# WPF上位机开发(进度条操作)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        软件上面如果一个操作比较缓慢,或者说需要很长的时间,那么这个时候最好添加一个进度条,提示一下当前任务的进展。这就是任务条的主要目的。试想一下,如果我们在下载文件、烧写文件、解压文件的时候,没有进度条提示我们,是不是很容易误认为软件出了什么问题,或者说软件是不是死锁了。而有了一个进度条之后,至少可以提示我们软件还在运行,所有的工作仍在推进当中,只不过进度比较慢而已。

        本身c# wpf也提供了进度条的控件,使用也不算复杂。需要注意的一点是,在vs2017或者更新一点的编译器上,最好采用异步更新的方法来更新控件的内容。

1、设计界面

        为了演示进度条,首先需要插入进度条控件,其次是label,最后是按钮。当按钮按下去的时候,进度条开始更新,label显示百分比。它的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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="ProgressBarDemo" Height="450" Width="600"><Grid><ProgressBar Name="progressBar" HorizontalAlignment="Left" VerticalAlignment="Top" Width="300" Height="20" Margin="20,100"/><Label Name="label"  Content="0%"  HorizontalAlignment="Left" VerticalAlignment="Top"  Width="50" Height="30" Margin="20,150,0,0"/><Button Content="Start Task" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,200,0,0" Click="StartTask_Click"/></Grid>
</Window>

        如果把xaml文件转换成图形,则是这样的,

2、代码编写

        有了界面之后,下面就可以进行代码的编写。这里面,最重要的实现就是按钮的回调函数。在回调函数中,我们会对进度条进行更新,同时也会对label的内容进行更新。相关的写法,大家最好能够熟练掌握,这样在后续使用的时候,直接拷贝复制即可。

using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Windows;using System.Threading.Tasks;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{ // construct functionpublic MainWindow(){InitializeComponent();}private async void StartTask_Click(object sender, RoutedEventArgs e){await Task.Run(() =>{int totalSteps = 100;for (int i = 0; i <= totalSteps; i+=1){UpdateProgressBar(i);Task.Delay(50).Wait();}});MessageBox.Show("Task finished!");}private void UpdateProgressBar(int value){Application.Current.Dispatcher.Invoke(() =>{progressBar.Value = value;label.Content = Convert.ToString(value) + "%";});}}
}

        代码中最值得说的部分,就是await这个操作。它本身相当于启动了一个thread,await里面的函数内容就是thread的函数体。每次递增的时候,函数体会进一步调用UpdateProgressBar这个子函数,里面包含了控件的更新部分,即Dispatcher.Invoke操作。

        而StartTask_Click函数会等待这个thread完成,在操作结束之后,会弹出一个消息对话框,告诉用户,当前任务已经完成了。

3、编译和测试

        界面和代码都ok之后,接下来就可以开始测试了。首先是编译,编译无误之后,直接单击按钮操作,如果没有什么问题的话,我们就会看到相关的更新和打印,

相关文章:

C# WPF上位机开发(进度条操作)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件上面如果一个操作比较缓慢&#xff0c;或者说需要很长的时间&#xff0c;那么这个时候最好添加一个进度条&#xff0c;提示一下当前任务的进展…...

vulnhub-Tre(cms渗透)

靶机和kali都使用net网络&#xff0c;方便探测主机获取ip1.靶机探测 使用fping扫描net网段 靶机ip&#xff1a;192.168.66.130 2.端口扫描 扫描发现该靶机三个端口&#xff0c;ssh&#xff0c;还有两个web&#xff0c;使用的中间件也是不一样的&#xff0c;一个是apache&…...

Re解析(正则表达式解析)

正则表达式基础 元字符 B站教学视频&#xff1a; 正则表达式元字符基本使用 量词 贪婪匹配和惰性匹配 惰性匹配如下两张图&#xff0c;而 .* 就表示贪婪匹配&#xff0c;即尽可能多的匹配到符合的字符串&#xff0c;如果使用贪婪匹配&#xff0c;那么结果就是图中的情况三 p…...

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…...

《漫画算法》笔记——计算两个大数的和

例题&#xff1a; 输入&#xff1a;“123”&#xff0c;“234” 输出&#xff1a;“357” 思路&#xff1a; 使用数组&#xff0c;分别计算每一位上的加和&#xff0c;注意记录进位信息。 然后&#xff0c;将数组恢复成字符串&#xff0c;输出。 值得注意的是&#xff0c;加和…...

Python3.13版本改进规划

大家好&#xff0c;最近faster-cpython 项目的文档介绍了关于 Python 3.13 的规划&#xff0c;以及在 3.13 版本中将要实现的一些优化和改进。faster-python 是 Python 的创始人 Guido van Rossum 和他的团队提出的计划 &#xff0c;目标是在四年内将 CPython 的性能提升五倍。…...

aws配置以及下载 spaceNet6 数据集

一&#xff1a;注册亚马逊账号 注册的时候&#xff0c;唯一需要注意的是信用卡绑定&#xff0c;这个可以去淘宝买&#xff0c;搜索aws匿名卡。 注册完记得点击登录&#xff0c;记录一下自己的账户ID哦&#xff01; 二&#xff1a;登录自己的aws账号 2.1 首先创建一个用户 首…...

进阶之路:高级Spring整合技术解析

Spring整合 1.1 Spring整合Mybatis思路分析1.1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用程序步骤9:运行程序 1.…...

【ArcGIS微课1000例】0081:ArcGIS指北针乱码解决方案

问题描述&#xff1a; ArcGIS软件在作图模式下插入指北针&#xff0c;出现指北针乱码&#xff0c;如下图所示&#xff1a; 问题解决 下载并安装字体&#xff08;配套实验数据包0081.rar中获取&#xff09;即可解决该问题。 正常的指北针选择器&#xff1a; 专栏介绍&#xff…...

uniapp运行到手机模拟器

第一步&#xff0c;下载MUMU模拟器 下载地址&#xff1a;MuMu模拟器官网_安卓12模拟器_网易手游模拟器 (163.com) 第二步&#xff0c;运行mumu模拟器 第三步&#xff0c;运行mumu多开器 第三步&#xff0c;查看abs 端口 第四步&#xff0c;打开HBuilder,如下图&#xff0c;将…...

基于PHP的蛋糕购物商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…...

嵌入式中的定时器概念

定时器概述 定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于定时、计数、脉冲宽度调制(PWM)等领域。 具体而言,定时器可以实现以下功能: 计时:定时器可以用来实现延时操作,例如等待外部设备的稳定、等待数据的接收等,也可以…...

鸿蒙ArkTS语言介绍与TS基础语法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言&#xff0c;它在TS基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等响应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言&#xff0c;已经被广泛用…...

08_CMDB系统开发二

CMDB系统开发二 一、用户组管理模块 1、展示用户组列表 Django自带了用户表&#xff0c;同时也带了用户组表。他们是多对多关系。用户组模型很简单&#xff0c;和User模型是多对多的关系。用户组顾名思义&#xff0c;就是对用户进行了分组。其作用在权限控制中就是可以批量的…...

JavaOOP篇----第九篇

系列文章目录 文章目录 系列文章目录前言一、java中是值传递引用传递?二、实例化数组后,能不能改变数组长度呢?三、假设数组内有5个元素,如果对数组进行反序,该如何做?四、形参与实参区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…...

华为OD机试 - 区间交集 - 深度优先搜索dfs算法(滥用)(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述备注用例1、输入2、输出3、说明 四、解题思路1、核心思路&#xff1a;2、具体步骤 五、Java算法源码再重新读一遍题目&#xff0c;看看能否优化一下~解题步骤也简化了很多。 六、效果展示1、输入2、输出3、说明 华为OD机试 2…...

德人合科技 | 防止公司电脑文件数据资料外泄,自动智能透明加密保护系统

【透明加密软件】——防止公司电脑文件数据资料防止外泄&#xff0c;自动智能透明加密保护内部核心文件、文档、图纸、源代码、音视频等资料&#xff01; PC端访问地址&#xff1a; www.drhchina.com &#x1f31f; 核心功能&#xff1a; 透明加密&#xff1a;采用高级加密算…...

常见加解密算法分析(含使用场景)

加密算法主要分为三类&#xff1a;对称加密算法、非对称加密算法和散列算法。下面将分别介绍这些类别中的常见算法及其特点和使用场景。 对称加密算法 1. AES (Advanced Encryption Standard) 简介&#xff1a; AES是一种广泛使用的对称加密标准&#xff0c;可以使用128、19…...

Oracle基本的SQL语句

1.最基本的增删改查 1.1.新增 insert 1.1.1.单表新增 INSERT INTO table_count_output (data_date,table_name,table_count ) VALUES (2023-03-15,FMCUSLVL,351 );COMMIT; 1.1.2.关联新增 INSERT INTO table_count_output (data_date,table_name,table_count )SELECTdata_…...

golang项目目录推荐

序言 逛GitHub的时候发现有个4.5k对goalng项目结构的推荐的项目&#xff0c;这里就简单的推荐下 文件目录 /cmd 项目主要的应用程序。 对于每个应用程序来说这个目录的名字应该和项目可执行文件的名字相匹&#xff08;例如&#xff0c;/cmd/myapp&#xff09;。不要在这个…...

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析

Pixel Fashion Atelier保姆级教程&#xff1a;从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建&#xff0c;专为时尚设计和像素艺术创作而…...

手把手教你搞定CMT2300A的315MHz匹配电路:从原理图到物料清单(附实测数据)

深入解析CMT2300A在315MHz频段的射频匹配电路设计与实战优化 作为一名长期深耕射频硬件设计的工程师&#xff0c;我最近在工业遥控器项目中遇到了一个典型挑战&#xff1a;如何为CMT2300A设计稳定可靠的315MHz匹配电路。与常见的433MHz应用不同&#xff0c;315MHz频段在元件参数…...

如何快速掌握FModel:解锁虚幻引擎游戏资源的完整实战指南 [特殊字符]

如何快速掌握FModel&#xff1a;解锁虚幻引擎游戏资源的完整实战指南 &#x1f3ae; 【免费下载链接】FModel Unreal Engine Archives Explorer 项目地址: https://gitcode.com/gh_mirrors/fm/FModel FModel是一款功能强大的虚幻引擎游戏资源解析工具&#xff0c;能够帮…...

云容笔谈·东方红颜影像生成系统与ComfyUI工作流集成:可视化节点式创作

云容笔谈东方红颜影像生成系统与ComfyUI工作流集成&#xff1a;可视化节点式创作 如果你是一位数字艺术家或者技术美术&#xff0c;可能常常面临这样的困境&#xff1a;你有一个绝佳的创意&#xff0c;比如想生成一幅融合了东方古典美学与现代光影的“红颜”肖像&#xff0c;但…...

一只菜鸟学深度学习的日记:填充 步幅 下采样

陕访惹玫在前两篇文章《最小二乘问题详解10&#xff1a;PnP问题求解》和《最小二乘问题详解11&#xff1a;基于李代数的PnP优化》中&#xff0c;我们分别通过常规思想与李代数思想&#xff0c;深入探讨了计算机视觉中 SFM&#xff08;Structure from Motion&#xff09;系统的核…...

Qwen3.5-4B-Claude-Opus实际作品:正则表达式语法树构建与匹配逻辑推演

Qwen3.5-4B-Claude-Opus实际作品&#xff1a;正则表达式语法树构建与匹配逻辑推演 1. 模型能力概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专注于逻辑推理和结构化分析的轻量级AI模型。作为Qwen3.5-4B的蒸馏版本&#xff0c;它在处理代码解释、算法分析…...

scanf_s使用避坑指南:如何正确应对C6064警告(含C6054连带问题处理)

scanf_s安全使用全指南&#xff1a;彻底解决C6064与C6054警告 在Windows平台进行C/C开发时&#xff0c;使用scanf_s函数处理用户输入是常见场景。但许多开发者都会遇到两个令人困惑的警告——C6064和C6054。这些警告看似简单&#xff0c;实则暗藏玄机。本文将带你深入理解这两个…...

从沙子到芯片:保姆级图解CMOS制造18步核心工艺(附高清流程图)

从沙子到芯片&#xff1a;图解CMOS制造18步核心工艺 想象一下&#xff0c;你手中智能手机的核心处理器&#xff0c;其内部晶体管数量已突破百亿级——这相当于将整个银河系的恒星数量压缩到指甲盖大小的硅片上。而这一切的起点&#xff0c;竟是海滩上最普通的沙子。本文将用18张…...

viem ABI工具使用教程:编码、解码和类型推断全攻略

viem ABI工具使用教程&#xff1a;编码、解码和类型推断全攻略 【免费下载链接】viem TypeScript Interface for Ethereum 项目地址: https://gitcode.com/gh_mirrors/vi/viem viem是一个轻量级、可组合且类型安全的TypeScript以太坊接口工具库&#xff0c;其强大的ABI工…...

const 变量的存储位置

const 变量的存储位置&#xff1a;不是绝对的只读区&#xff01;这是 C/C 面试/学习高频易错点&#xff0c;核心结论&#xff1a;const 只修饰「只读权限」&#xff0c;不直接决定存储位置&#xff0c;变量放哪里&#xff0c;由变量的「作用域/生命周期」决定。一、分情况讲清楚…...