Так что моя проблема заключается в следующем. У меня есть форма с панелью в нем. Эта панель служит контейнером для множества различных пользовательских контролей, из которых одновременно виден только один. Некоторые из указанных пользовательских контроллеров отображают большое количество данных из БД, поэтому их загрузка занимает немного времени (данные отображаются в связанном сетевом представлении данных). Я попытался создать метод LoadData для этих элементов управления, который затем запускался в отдельных потоках, и после того, как они выполнили свою работу, они отображают реальные кнопки в главной форме.
Однако было много разных проблем. Во-первых, я не могу вызвать это. Вызывать пользовательский контроль до тех пор, пока не будет создан его дескриптор, что кажется довольно сложным, особенно если я хочу показать заставку во время инициализации (дескриптор главной формы еще не создан). *
Мне удалось форсировать это, установив form.Visible = true и затем вызвав form.CreateControl, за которым следует form.visible = false. Это, однако, показывает мигающую форму на экране, которая выглядит не очень хорошо.
Я также пытался не использовать Invoke, если дескриптор еще не создан, но это приводит меня к проблеме того, что мой объект данных создается в другом потоке, а затем становится недоступным для «нормального» потока элемента управления.
Так что, как, наверное, совершенно очевидно, я совершенно заблудился, когда дело доходит до многопоточности, особенно в случае с winforms, и тем более при запуске приложения. Мое объяснение также может быть довольно запутанным, но я постараюсь уточнить, если это необходимо.
Итак, как правильно это сделать?