首页 > 其他分享 >WPF UI更新技巧:掌握EventHandler的基础与Dispatcher的高级应用

WPF UI更新技巧:掌握EventHandler的基础与Dispatcher的高级应用

时间:2024-02-27 18:58:40浏览次数:13  
标签:EventHandler 更新 public 线程 UI WPF Dispatcher

 

概述:在WPF中,通过EventHandler可实现基础和高级的UI更新方式。基础用法涉及在类中定义事件,并在UI中订阅以执行更新操作。高级用法借助Dispatcher类,确保在非UI线程上执行操作后,通过UI线程更新界面。这两种方法提供了灵活而可靠的UI更新机制。

在WPF(Windows Presentation Foundation)中,使用EventHandler更新UI内容是一种常见的做法。这可以通过基础用法和高级用法来实现。

1. 基础用法:

步骤:

  1. 定义事件: 在需要更新UI的类中定义一个事件,并确保事件的委托签名与EventHandler一致。
public class MyDataClass
{
    public event EventHandler DataUpdated;

    // 触发事件的方法
    protected virtual void OnDataUpdated(EventArgs e)
    {
        DataUpdated?.Invoke(this, e);
    }

    // 数据更新的方法
    public void UpdateData()
    {
        // 数据更新操作

        // 触发事件通知UI更新
        OnDataUpdated(EventArgs.Empty);
    }
}
  1. 订阅事件: 在UI的代码中订阅事件,以便在事件触发时执行更新UI的操作。
public partial class MainWindow : Window
{
    private MyDataClass myData;

    public MainWindow()
    {
        InitializeComponent();

        // 初始化数据类
        myData = new MyDataClass();

        // 订阅事件
        myData.DataUpdated += MyData_DataUpdated;
    }

    // 事件处理方法,用于更新UI
    private void MyData_DataUpdated(object sender, EventArgs e)
    {
        // 更新UI的操作
    }
}

2. 高级用法:

WPF还提供了Dispatcher类,用于在非UI线程上更新UI。在某些情况下,需要在后台线程执行操作,然后通过Dispatcher回到UI线程。

步骤:

  1. 使用Dispatcher更新UI
public class MyDataClass
{
    public event EventHandler DataUpdated;

    protected virtual void OnDataUpdated(EventArgs e)
    {
        // 使用Dispatcher在UI线程上触发事件
        Application.Current.Dispatcher.Invoke(() =>
        {
            DataUpdated?.Invoke(this, e);
        });
    }

    public void UpdateData()
    {
        // 后台线程中的数据更新操作

        // 触发事件通知UI更新
        OnDataUpdated(EventArgs.Empty);
    }
}

这确保了在数据更新时,即使在后台线程,也能够安全地更新UI。

以上两种用法可根据具体情况选择,基础用法简单直接,而高级用法则在需要在后台线程中进行操作时非常有用。

 

 

标签:EventHandler,更新,public,线程,UI,WPF,Dispatcher
From: https://www.cnblogs.com/hanbing81868164/p/18037566

相关文章

  • Flutter 使用inspector 调试UI
    1.在AndroidStudio中点击Flutterinspector2.点击FlutterPerformace-openDevtool在浏览器中调试3.点选中widget可以在widget树中和模拟器中相互点击调试、相应控件会高亮4.其他功能 ......
  • 创建 Harmony 项目之后 build 时可能出现 ohpm registry is empty 的错误
    HarmonyOS是最近最火的操作系统,HarmonyOS宣布删除Android代码之后,HarmonyOS正式向世界上第三大操作系统有迈进了一步,HarmonyOS前期为了完成从Android到HarmonyOS的过渡,在设计之初HarmonyOS采用了双框架架构设计。从图中可以看出无论HarmonyOS还是Android底层都是......
  • uniGui用UniURLFrame1填写表单
    参考自带例子:C:\ProgramFiles(x86)\FMSoft\Framework\uniGUI\Demos\Desktop\HTTPPostCallback-URLFrame-AutoTarget 添加步骤1] 2] 3] ......
  • General Guide
    发现结果不好时,可以按下图顺序来调整先考虑Lossontrainingdata,如果large,考虑modelbias和optimization ModelBiasmodel太简单,导致最优解不在空间里,只能找到小空间的最优解,犹如大海捞针,针却不在大海这时我们要redesign一下model,更复杂一些,更大的弹性,增加输入的feature,可......
  • C#程序全局异常处理—WPF和Web API两种模式
    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目,后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享。WebAPI项目的全局异常处理这种项目下,我们可以直接自定义一个全局异常的过滤器,用来处理全局......
  • .NET GUI 相关页面跳转方案
    1.NavigationView是UWP,及现在winui流行的主窗口导航方式。创建一个NavigationView,在里面放置Frame作为右侧主要的展示窗口。在CodeBehind中实现NavView的ItemInvoked事件。根据参数InvokedItem(每一个Item的Content名称),或者每一Item的Tag来确定跳转。(还需处理重复跳转......
  • 学习unigui【20】unistringGrid
    做成下面效果图: 采用unistringGrid控件。问题:1、不同的日期区间如何得到。如:项目  开始时间时间--终止使用时间呼吸机 yyyy-mm-dd  yyyy-mm-dd呼吸机 yyyy-mm-dd  yyyy-mm-dd插管 yyyy-mm-dd  yyyy-mm-ddSELECT"器械"::VARCHAR(30)AS"......
  • delphi 提高unigui开发效率的两个方法
    1、编译时自己退出运行的程序。在做unigui开发时,每次编译运行时,unigui的应用都会在后台运行,每次重新编译时都必须手工在任务栏里将应用退出才行,非常麻烦,可以在项目编译的参数里加上杀进程的命令,这样每次重新编译时就会自动将旧的进程杀掉。命令参数如下:taskkill/f/im$(OUTPUT......
  • C# WPF 根据RGB三色得出透明度Opacity
    当我们把ARGB压缩为RGB数据时,会丢失A透明通道那么就有可能会遇到反推A透明通道的问题原理很简单,取RGB三色最大通道除255得到A通道Randomrandom=newRandom();bytered=Convert.ToByte(random.Next(0,0xff));bytegreen=Conver......
  • 微信小程序weui库表单提交 rules校验用法
    在开发微信小程序时候,一定会遇到表单提交问题。表单提交会遇到各种校验问题。微信小程序官方文档上面form是不带有校验功能的。如果要用需要自己手动校验。但是在weui中是有表单校验功能的,今天就来记录一下表单校验如何使用微信开放文档: https://developers.weixin.qq.com/min......