C# 为单个控件创建的Handle多次出现

C# 为单个控件创建的Handle多次出现,c#,.net,winforms,controls,C#,.net,Winforms,Controls,我正在使用需要注册到异步事件的控件。 事件将使用WinForms控件实现的接口在UI线程中引发 我无法在构造函数中注册事件,因为它允许在控件完全创建之前调用事件处理程序。在此期间,不允许调用ISynchronizeInvoke 该问题的解决方案是使用执行从事件处理程序到的异步事件注册,而不是从构造函数注册 但是,这带来了另一个问题,在某些场景中,由于控件状态的更改,HandleCreated事件被多次引发。 例如,“RightToLeft”属性的每次更改都会导致WMCreate消息引发“Hand

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

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

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

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

我怎样才能防止事件上升的倍数? 是否有其他方法可以知道控件何时创建并首次显示


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

你不能只覆盖
CreateHandle
并选中
creatinghandle
?您可能还想覆盖
DestroyHandle
以捕获该事件。

您考虑过使用Load事件吗?此时,非托管句柄肯定是可用的