c# 20260113

之前说了application和window生命周期,现在就要涉及这些类的基类的介绍。下面是继承关系:

DispatcherObject类

dispatcher:调度员的意思。主要功能就是负责跨线程调度。


为什么要DispatcherObject类跨线程调度?

.NET为WPF准备了两个线程(WPF应用程序启动时),分别用于呈现界面(后台线程)和管理界面(UI线程)。后台线程一直隐藏在后台默默运行,我们感知不到,我们唯一能操作的就是UI线程。

**绝大多数对象或控件都必须在UI线程上创建,并且,其它后台子线程不能直接访问UI线程上的控件。**那么,后台线程非要访问UI线程的控件或对象该怎么办呢?微软说,这样吧,我在UI线程上给你们提供一个中间商Dispatcher(调度员),将Dispatcher放到一个抽象类DispatcherObject中,然后我向你保证,我所有的控件都从这个DispatcherObject类继承。这样当你们在后台线程中要访问控件时,就可以从控件中找到那位中间商Dispatcher,由中间商来完成你要对控件的操作访问。


DispatcherObject是WPF中的顶级基类,虽然在整个C#语言中不是最基础的(继承自System.Object),但在WPF体系中处于核心地位。为了体现跨线程调度功能,采用窗体加载时修改按钮内容的方式来展示效果

在MainWindow.xaml中加入button控件:

窗体加载时修改按钮内容方式有好几种,首先在当前线程里面直接对loaded窗体加载事件(昨天的window生命周期有介绍)添加订阅方法,方法里面修改按钮内容。

貌似上面部分可以简写成这样,我是看昨天的东西,想到这个的,老师用上面那种,我模仿成下面这种,其中(s,e)是MainWIndow_Loaded的参数简写:

上面这两种本质都是一样的,都是在当前线程直接修改按钮内容。效果是这样的:


如果我要在另外线程修改呢?

这里要介绍的是Task.run(), 它的作用就是将在线程池上运行的指定工作排队,并返回代表该工作的 Task 对象。简单点就是创建一个子线程。

当在主窗体类下面创建一个子线程来实现:

也可以这么写:

上下是一个道理,采用了匿名函数方式,就是昨天那种。要多看多想,自然会理解。

当在不同类下面来修改按钮内容实现:

创建一个WindowHelper类,里面这么写,利用application也是继承DispatcherObject,因此也可以调用里面的调度方法:

在MainWindow这个类里面这么修改,添加事件:

同样也可以修改按钮的内容。上面的所有都是不同情况修改UI控件的代码了。

麻了,现在会有很多新东西需要学习,速度开始变慢,越来越晚了,现在的目标就是争取理解目前出现的课程里面的所有代码,多看多理解,多敲,就这样了。

--------------------------------------2026.1.14-----------------------------------------------

相关推荐
2601_9669496531 分钟前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717642 分钟前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
He BianGu2 小时前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04272 小时前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
RAN11426760082 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .3 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988723 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒4 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)4 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
2501_933670794 小时前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言