C# полностью загружает WinForm, не показывая его (VS2010)
Работа с DevExpress 2012 vol 2.10 C# поверх VS 2010
Первый вопрос, кажется, был неясен... Итак, давайте проясним это немного (или попробуем хотя бы)!
Мы создаем MainForm с лентой, содержащей много кнопок. Каждая кнопка на Ленте отключена, пока их соответствующее состояние не "готово к включению". "Готовность к включению" зависит от одной вещи: WinForm_Popup, связанный с кнопкой, был полностью собран, включая извлечение данных и конструкцию DevExpress.ExpressApp.ListView.
- Извлечение данных из базы данных занимает менее 0,1 секунды
- Вызов WinForm_Popup.Show() занимает более 15 секунд.
Мы попытались поместить это в поток или задачу, но безуспешно: это приводит к сбою WinForm_Popup.Show() с исключением, связанным с событием DragDrop.
На данный момент я знаю, что метод Show () занимает много времени, но я понятия не имею, что происходит в этом методе, но создаю DevExpress.ExpressApp.ListView, который должен быть удален из Show (или сделать это в Задача или Тред может быть).
Или, другими словами, если пользовательский интерфейс WinForm_Popup полностью собран, как показано, но выполняется асинхронно (например, в отдельной задаче).
Любая идея, совет, помощь, ссылка, предложение, совет... Любая "вещь"?
2 ответа
Сделайте новую форму и сделайте ее пустой. В файле program.cs измените основную форму на новую. Затем сделайте новый конструктор формы следующим образом:
public newForm()
{
this.Hide();
Thread backTh = new Thread(() =>
{
MainForm mf = new MainForm();
mf.Show();
});
backTh.Start();
}
Я бы пошел на противоположный подход, который обычно используется в медленных системах загрузки, таких как веб-браузер. Почему бы вам не загрузить форму быстро, а затем использовать поток, чтобы заполнить представление сетки медленной загрузки?
Таким образом, вы можете иметь как вращающиеся песочные часы (или что-то менее 1995 года), которые будут сообщать вашим пользователям, что данные загружаются.