WPF通过线程使用ProcessBar的方法详解

 更新时间:2019年04月11日 10:27:04   作者:风幻影  
这篇文章主要给大家介绍了关于WPF通过线程使用ProcessBar的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用WPF具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

WPF下使用进度条也是非常方便的,如果直接采用循环然后给ProcessBar赋值,理论上是没有问题的,不过这样会卡主主UI线程,我们看到的效果等全部都结束循环后才出现最后的值。

所以需要采用线程或者后台方式给进度条赋值的方式,以下通过线程来触发事件触发的方式来实现给进度条赋值。这样就可以模拟我们在实际过程中处理数据的一种进度方式。

方法示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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 WpfTestProcessBar
{
 /// <summary>
 /// MainWindow.xaml 的交互逻辑
 /// </summary>
 public partial class MainWindow : Window
 {
  public delegate void ProgressDelegate(int percent);
  public MainWindow()
  {
   InitializeComponent();
   ProgressEvent += MainWindow_ProgressEvent;
   beginImport();
  }
  void MainWindow_ProgressEvent(int percent)
  {
   Dispatcher.Invoke(new Action<System.Windows.DependencyProperty, object>(Pro.SetValue), System.Windows.Threading.DispatcherPriority.Background, new object[] { ProgressBar.ValueProperty, Convert.ToDouble(percent+ 1) });
   Dispatcher.Invoke(new Action<System.Windows.DependencyProperty, object>(label.SetValue), System.Windows.Threading.DispatcherPriority.Background, new object[] { Label.ContentProperty, Convert.ToString((percent + 1)+"%") }); 

  }
  private event ProgressDelegate ProgressEvent;
  private void beginImport()
  {
   Pro.Maximum = 100;
   Pro.Value = 0;
   label.Content = "0%";
   ThreadPool.QueueUserWorkItem(state =>
   {
    Thread.Sleep(2000);
    for (int i = 0; i < 100; i++)
    {
     if (ProgressEvent != null)
     {
      ProgressEvent(i);
     }
     Thread.Sleep(10);
    }
   });
  }
 }
}

以上只是一种实现方式,希望给有需要的人提供帮助。

效果如下:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Unity实现游戏存档框架

    Unity实现游戏存档框架

    这篇文章主要为大家详细介绍了Unity实现游戏存档框架,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • 基于C#中IDisposable与IEnumerable、IEnumerator的应用

    基于C#中IDisposable与IEnumerable、IEnumerator的应用

    本篇文章小编为大家介绍,基于C#中IDisposable与IEnumerable、IEnumerator的应用,需要的朋友参考下
    2013-04-04
  • C#实现数字转换

    C#实现数字转换

    这篇文章主要为大家详细介绍了C#实现数字转换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • c# datetime方法应用介绍

    c# datetime方法应用介绍

    本文将详细介绍c# datetime方法应用,需要了解更多的朋友可以参考下
    2012-11-11
  • C#使用Excel动态函数实现生成依赖列表

    C#使用Excel动态函数实现生成依赖列表

    这篇文章主要为大家详细介绍了如何在C#中使用 Excel 动态函数生成依赖列表,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • 使用xmltextreader对象读取xml文档示例

    使用xmltextreader对象读取xml文档示例

    这篇文章主要介绍了使用xmltextreader对象读取xml文档的示例,需要的朋友可以参考下
    2014-02-02
  • C#实现公式计算验证码的示例详解

    C#实现公式计算验证码的示例详解

    现在很多的平台已经不使用普通的数字、字母等验证码了,取而代之的是拼图类、选图类、旋转类或者计算类的验证码。本文将利用C#实现一个公式计算验证码,感兴趣的可以了解一下
    2022-10-10
  • C#往线程里传递参数的方法小结

    C#往线程里传递参数的方法小结

    这篇文章主要介绍了C#往线程里传参数的方法小结的相关资料,还给大家简单说明下传参的两种方式,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • C#找出字符串中第一个字母并大写的方法

    C#找出字符串中第一个字母并大写的方法

    这篇文章主要介绍了C#找出字符串中第一个字母并大写的方法,通过C#面向对象的方式定义了类的成员函数实现字符串转换的功能,需要的朋友可以参考下
    2016-02-02
  • C# datagrid非常规方法实现添加合并列

    C# datagrid非常规方法实现添加合并列

    这篇文章主要介绍了C# datagrid非常规方法实现添加合并列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论