Я работаю с WinForms. Я столкнулся со следующей проблемой. Я должен динамически создавать и добавлять на две вкладки в конкретный период времени.Добавить компоненты в форме асинхронно
Это основной макет
IMainGeneralReportForm mainGeneralReportLayoutForm =
ObjectFactory.GetOrCreateView<IMainGeneralReportForm>();
Я пытаюсь добавить свои элементы в следующем виде:
ObjectFactory.ShowView<IGeneralReportSimpleView>();
ObjectFactory.ShowView<IGeneralReportAdvancedSearchView>();
Методы ShowView
работает отлично. Но когда я вызываю методы один за другим, производительность программы немного медленная. Поэтому я решил использовать многопоточность в следующем виде:
MainGeneralReportForm generalReportForm = mainGeneralReportLayoutForm as MainGeneralReportForm
generalReportForm.Invoke(new SimpleViewDelegate(() =>
{
return ObjectFactory.ShowView<IGeneralReportSimpleView>()
}));
generalReportForm.Invoke(new AdvancedViewDelegate(() =>
{
return ObjectFactory.ShowView<IGeneralReportAdvancedSearchView>()
}));
private delegate IGeneralReportSimpleView SimpleViewDelegate();
private delegate IGeneralReportAdvancedSearchView AdvancedViewDelegate();
Эти подходы работают одинаково. Не могли бы вы дать мне совет, как решить эту проблему при многопоточности?
Пользовательский интерфейс и рабочие потоки не работают хорошо. Вам нужно узнать, что занимает много времени и делегировать его в рабочий поток. Вы можете использовать TPL для этого. Пользовательский интерфейс должен быть доступен только в потоке пользовательского интерфейса. –