And hopefully this field is read-only, so no method of this class or the base class could replace the ThreadHelper with another kind of SynchronizeInvoke?
This still feels fragile, but I suppose anything that puts something else in that field will cause a crash pretty promptly before it escapes into the wild, so it probably doesn't matter. Be nice to make the base class dispose the SynchronizeInvoke iff it is Disposable, but I guess sometimes it is the parent window and we are not ready to dispose it?
Be nice to at least have a comment saying that in this subclass SynchronizeInvoke is always the ThreadHelper created in the constructor.