我有一个TextReader
的子表单,可以在被调用时加载一些值。它在我召唤表格的那一刻一直在崩溃。此表单有Timer
,以这种方式更新TextBox
的文字:
textbox.Text = this.ActiveControl.Name;
我注意到在加载操作期间禁用计时器可以防止崩溃发生。我是否可以说TextReader
被this.ActiveControl
干扰并导致崩溃?
VS Just-in-Timer调试器每次都会发出不同的[xxxx]错误代码。尝试使用VS调试“无法附加崩溃进程。已经附加了调试器。”
答案 0 :(得分:1)
您可能遇到竞争条件:如果在调用计时器(并尝试访问它)时尚未初始化ActiveControl
,则会发生崩溃。正如您所提到的,您需要确保计时器在完全初始化之前不会访问无效ActiveControl
(通过在此之前禁用它或通过其他方式保护访问(例如互斥/信号量))
答案 1 :(得分:0)
谢谢大家的帮助。我忽略了Hans Passant的回复。现在,当我将TextBox文本更新嵌入到if中时:
if(this.ActiveControl!= null) {tbTest.Text = this.ActiveControl.Name; }
即使我没有禁用计时器,也不会再发生崩溃。 Kaboom,Hans发现错误! ^^
感谢Attila给了我指向竞争条件的指针。在知识工具箱中非常有用。