【问题标题】:multiple occurences of HandleCreated for a single control为单个控件创建多个句柄
【发布时间】:2008-12-24 14:47:31
【问题描述】:

我正在使用需要注册到异步事件的控件。 事件将在 UI 线程中使用由 WinForms 控件实现的ISynchronizeInvoke 接口引发

我无法在构造函数中注册事件,因为它允许在完全创建控件之前调用事件处理程序。在此期间不允许调用 ISynchronizeInvoke。

解决该问题的方法是使用从事件处理程序到HandleCreated 执行异步事件注册,而不是从构造函数注册。

然而,这带来了另一个问题,在某些场景中,HandleCreated 事件会由于控件状态的更改而多次引发。 例如,每次更改“RightToLeft”属性都会导致 WMCreate 消息引发“HandleCreated”事件。

如何防止事件上升的倍增? 是否有另一种方法可以知道控件何时创建并首次显示?

我可以在 HandleCreated 中保留一个布尔标志,但是感觉就像是 hack,我想知道是否有更好的方法来处理这个问题。

【问题讨论】:

    标签: c# .net winforms controls


    【解决方案1】:

    你不能直接覆盖CreateHandle 并检查RecreatingHandle 吗?您可能还想覆盖 DestroyHandle 来捕捉它。

    【讨论】:

      【解决方案2】:

      您是否考虑过使用 Load 事件?非托管句柄在那个时间点肯定是可用的。

      【讨论】:

        猜你喜欢
        • 2021-09-22
        • 2010-12-20
        • 2017-06-03
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        • 2015-04-06
        • 2014-10-27
        相关资源
        最近更新 更多