C# WPF使用DispatcherTimer更新Label时Tick事件不执行如何解决
问题原因
你代码里存在两个核心问题导致Tick事件无法触发:
- 初始化
DispatcherTimer后没有调用Start()方法启动计时器,计时器默认处于停止状态,自然不会触发Tick回调 - 你在MainWindow构造函数中声明的
letterRandomizer实例是局部变量,构造函数执行完成后该实例没有被任何引用持有,会被垃圾回收器销毁,其内部的DispatcherTimer也会随之被释放
修复方案
第一步:修改letterRandomizer类的构造函数,添加计时器启动逻辑
public letterRandomizer(Label myLbl) { this.MyLbl = myLbl; letter.Tick += Letter_Tick; letter.Interval = TimeSpan.FromSeconds(2); // 新增启动计时器的代码 letter.Start(); }
第二步:修改MainWindow代码,将letterRandomizer实例提升为类成员变量,避免被GC回收
// 声明为类成员变量 private letterRandomizer _letterRandomizer; public MainWindow() { InitializeComponent(); _letterRandomizer = new letterRandomizer(myLbl); }
修改完成后运行即可看到Label每隔2秒刷新为随机大写字母。
内容的提问来源于stack exchange,提问作者Liryk
相关产品推荐
相关产品推荐

