代码问题:WorkshopIsPainted始终为null,与workshop.Painted状态无关
问题分析与修复方案
我一眼就揪出了导致WorkshopIsPainted始终为null的两个关键问题,咱们逐个拆解:
1. 逻辑分支的致命漏洞
你的timer4_Tick方法里的逻辑写反了方向:
if (!workshop.painted) { WorkshopIsPainted = workshop.Painted; } else return;
这意味着只有当workshop.painted为false时,才会给WorkshopIsPainted赋值;如果workshop.Painted是true,代码直接执行return跳过赋值步骤。而WorkshopIsPainted的初始值就是null,所以当workshop.Painted为true时,它永远不会被更新,一直保持null状态。
2. 大小写不一致的隐性bug
你判断条件用的是workshop.painted(小写p),但赋值时用的是workshop.Painted(大写P)。如果workshop类里的属性是符合C#规范的Painted(大写开头),那workshop.painted要么是另一个未初始化的字段,要么就是笔误——这会让判断逻辑完全偏离你的预期,比如实际Painted是true,但painted是默认的false,进一步加剧赋值异常。
修复后的代码
先修正逻辑和大小写问题,再确保timer能正常启动:
public partial class Form1 : Form { public bool? WorkshopIsPainted; public Form1() { InitializeComponent(); // 别忘了启动timer,否则Tick事件永远不会触发 timer4.Start(); } private void timer4_Tick(object sender, EventArgs e) { // 统一用正确的属性名,不管值是true还是false都赋值 WorkshopIsPainted = workshop.Painted; // 如果不需要timer一直运行,可以在这里添加停止逻辑:timer4.Stop(); } }
额外检查要点
- 确认
workshop对象已经被正确实例化,不是null(否则会抛出空引用异常)。 - 检查
timer4的Interval属性是否设置合理,确保事件能按预期频率触发。
内容的提问来源于stack exchange,提问作者Msorich
相关产品推荐
相关产品推荐

