Вам необходимо поменять код.
Конструктор FormWithLotData работает в потоке пользовательского интерфейса. Это поток, который должен показать вашу форму FormIsLoading. Поэтому вместо того, чтобы пытаться отобразить эту форму с помощью нового потока, загрузите данные вместе с ним.
Способ DoEvents, предложенный другими, является самым простым в реализации и (возможно? Сам никогда не делал) может работать хорошо.
Лучше использовать шаблон для загрузки данных в рабочий поток. Прежде чем показывать свои FormWithLotData, начните загрузку данных в фоновом потоке и покажите диалоговое окно загрузки. Метод, который загружает данные, должен иметь метод обратного вызова в диалоге загрузки, чтобы сигнализировать, когда он должен закрыть (). После его закрытия вы можете создать новый FWLD, передать ему уже загруженные данные и показать его.
Попытка загрузить ваши данные после того, как форма уже была вызвана, смешивает ваш пользовательский интерфейс с операциями с данными, заставляя вашу форму не только отвечать за пользовательский интерфейс, но и отвечать за поиск данных. Плохо для KISS и одиночной ответственности, имхо.
После вашего обновления кажется, что DoEvents будет единственным реальным ответом на ваш вопрос, но с некоторыми оговорками.
Вы не сможете показывать другую форму МОДАЛЬНО, пока создаете свое дерево. Вам все равно придется выполнять тяжелую работу в конструкторе формы. Вам все равно придется скрыть свою основную форму и Show () (не ShowDialog) форму загрузки. Вы также должны будете вызывать DoEvents в каждый возможный момент при построении вашего дерева. Это не совсем элегантное решение, но, вероятно, будет лучшим выбором на данный момент.