Я знаю, что есть несколько потоков об инициализации материала в другом потоке, поэтому вам не нужно замораживать свой интерфейс. Но в моем случае эта инициализация включает в себя создание множества графиков (полилиний в холсте), поэтому, похоже, необходимо заморозить пользовательский интерфейс.WPF запускает интерфейсы без замораживания GUI
Это может быть достаточно хорошо, чтобы скрыть рамку, где объекты инициализируются (я уже дал сообщение «loading ..» ниже) и затем заморозил пользовательский интерфейс (пару секунд), а затем снова отобразил рамку.
Это то, что у меня есть до сих пор. Но он не работает ... он замораживает пользовательский интерфейс перед тем, как скрывать ничего, и он размораживается после загрузки полностью инициализируемого кадра. В противном случае вещь работает как шарм.
void Historics_showExperimentResults(object sender, EventArgs e)
{
aepPage = new AEPPage();
resultsPage = new AEPResultSet();
// I try to hide the frame. Below there is a "Loading..." nice text.
// not sure if it's the best way but it works if I dont show anything at the end
ParadigmFrame.Dispatcher.Invoke((Action)delegate
{
ParadigmFrame.Content = null;
ParadigmFrame.UpdateLayout();
});
// This is the initialization that needs to have the GUI thread
//because it draw some plots and polylines
aepPage.Dispatcher.Invoke((Action)delegate
{
aepPage.init(resultSet);
});
//Then I want to go and visualize the initialized page with the plots
ParadigmFrame.Dispatcher.Invoke((Action)delegate
{
ParadigmFrame.Navigate(aepPage);
});
}
Любые подсказки ??? Как я уже сказал, я попытался поместить init в другой поток и добавить событие, когда закончил, но эти потоки нуждаются в контроле над пользовательским интерфейсом для инициализации полилиний на холсте, поэтому .. он не работает :(
! заранее спасибо
Hum .. Я пробовал .. ничего не произошло :(Как я уже сказал, aepPage.init (resultSet), создает кучу полилиний и графиков, поэтому он должен работать в потоке пользовательского интерфейса, и это отнимающая много времени/блокирующая часть кода Моя основная забота - убедиться, что выполнено ParadigmFrame.Content = null (поэтому оно исчезает, и сообщение «Загрузка ..» становится видимым) Использование вашего решения не разрешило его :( – javirs
hmm интересный - я понимаю вашу проблему. Dispatcher.Invoke() запустит делегат в потоке пользовательского интерфейса. Я ввел «новый поток», так что после первого 'dispatcher.invoke', поток пользовательского интерфейса должен получить некоторый передышку для запуска других событий в виде перерисовки UI и т. Д. Является ли поведение точно таким же, как без запуска в этой «новой теме»? Можете ли вы попытаться поместить Thread.Sleep после первый «диспетчер.Инвоке»? – YK1
т.е.Я попытался добавить некоторый сон, чтобы дать немного воздуха в пользовательском интерфейсе, на самом деле я также пробовал это раньше, но ничего не изменилось :( – javirs