【发布时间】:2008-12-24 14:47:31
【问题描述】:
我正在使用需要注册到异步事件的控件。 事件将在 UI 线程中使用由 WinForms 控件实现的ISynchronizeInvoke 接口引发
我无法在构造函数中注册事件,因为它允许在完全创建控件之前调用事件处理程序。在此期间不允许调用 ISynchronizeInvoke。
解决该问题的方法是使用从事件处理程序到HandleCreated 执行异步事件注册,而不是从构造函数注册。
然而,这带来了另一个问题,在某些场景中,HandleCreated 事件会由于控件状态的更改而多次引发。 例如,每次更改“RightToLeft”属性都会导致 WMCreate 消息引发“HandleCreated”事件。
如何防止事件上升的倍增? 是否有另一种方法可以知道控件何时创建并首次显示?
我可以在 HandleCreated 中保留一个布尔标志,但是感觉就像是 hack,我想知道是否有更好的方法来处理这个问题。
【问题讨论】: