我们花了300个工时来修复现场的错误应用程序.这一切都归结为调用Application.DoEvents(re-entrancy problem).
这没有在设计评论,代码评论中发现.两年前插入的代码是第一个版本; 应用程序总是"不稳定",但最近的变化在很大程度上暴露了重新入侵问题.
此事件是我们组织中第二次发生Application.DoEvents导致失败和多人工作时间的调试.在这种情况下,通过简单地注意到调用,在一个异步任务的复杂事件处理程序中埋下来,就发现了它.
你有什么建议可以防止这个问题再次发生:
添加签入门到源代码管理?
开发者培训?
代码分析规则(为什么这不是内置规则?)
如何执行编码练习?
每次集中构建应用程序时,在每个程序集上运行它:
ildasm MyAssembly.exe /TEXT
然后搜索输出:
System.Windows.Forms.Application::DoEvents
如果找到,请将构建标记为失败,就好像它是编译错误一样.