-1

我有一个子表单,它TextReader可以在被调用时加载一些值。我召唤表格的那一刻,它一直在崩溃。此表单具有以这种方式Timer更新 a 文本的 a TextBox

textbox.Text = this.ActiveControl.Name;

我注意到在加载操作期间禁用计时器会阻止崩溃的发生。我可以说TextReader受到干扰this.ActiveControl并导致崩溃吗?

VS Just-in-Timer 调试器每次都会给出不同的 [xxxx] 错误代码。尝试使用 VS 进行调试得到“无法附加崩溃进程。已附加调试器。”

4

2 回答 2

1

您很可能有一个竞争条件:如果在ActiveControl调用计时器时尚未初始化(并尝试访问它),您将遇到崩溃。正如您所提到的,您需要确保计时器在ActiveControl完全初始化之前不会访问无效(通过在此之前禁用它或通过其他方式(例如互斥锁/信号量)保护访问)

于 2012-06-18T17:18:50.983 回答
0

感谢大家的帮助。我忽略了汉斯·帕桑特的回答。现在,当我以这种方式将 TextBox 文本更新嵌套在 if 中时:

if (this.ActiveControl != null) { tbTest.Text = this.ActiveControl.Name; }

即使我不禁用计时器,也不会再发生崩溃。Kaboom,汉斯指出了错误!^^

感谢 Attila 给了我关于比赛条件的指针。在知识工具箱中非常有用。

于 2012-06-18T17:36:34.743 回答