Need RemoveHandler to avoid multiple calls to ml_UpdateControls
I think you need to add a "RemoveHandler" in each form's Dispose method or Closing event in order to properly disconnect the LanguageChanged event handler from the form.
Without this, an additional event handler gets registered each time the form is created (even if it was properly disposed), and this results in multiple calls to ml_UpdateControls.
example:
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
RemoveHandler MlRuntime.MlRuntime.LanguageChanged, AddressOf ml_UpdateControls