Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Winforms применяет ограничение минимального размера к форме, основанной на сохранении заголовка. Даже если у формы нет такой, причуда, которую большинство программистов называют «ошибкой».
Однако вы все равно можете переопределить конечный размер, установив свойство ClientSize в обработчике событий для события Load. Остерегайтесь необходимости перемасштабировать окно на компьютере с другим параметром DPI видео, вы не хотите жестко кодировать размер. Лучший способ - изменить его на основе положения элемента управления. Например:
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
this.ClientSize = new Size(
this.ClientSize.Width,
OKButton.Bottom + OKButton.Margin.Bottom
);
}
С предположением, что элемент управления с именем OKButton является нижним. При необходимости отрегулируйте.