Я делаю длинный цикл проверки содержимого папки, разделенной на три части.
p1 - В этой папке содержится более 5000 папок,
p2 - у которых есть ~ 10 папок по одному,
p3 - то неизвестное количество файлов/папок для каждого.Как обновить окна во время длинного цикла
Я сделал индикатор выполнения с максимальным значением = p1.nbFolder в конце каждой p1.folder я увеличиваю прогрессную панель. , но замораживание окна и единственное, что работает для обновления окон в конце каждой папки, - MessageBox.Show ("");
это.UpdateLayout(); не работает
Thread.Sleep (0); ни
for (int inc = 0; inc < postes.Items.Count; inc++) {
poste = (TreeViewItem)postes.Items[inc];
poste.IsSelected = true;
tranches = (TreeViewItem)tr_tranche.Items[0];
for (int incb = 0; incb < tranches.Items.Count; incb++) {
tranche = (TreeViewItem)tranches.Items[incb];
tranche.IsSelected = true;
StackPanel SPposte = (StackPanel)poste.Header;
Label Lposte = (Label)SPposte.Children[1];
String Sposte = (String)Lposte.Content;
StackPanel SPtranche = (StackPanel)tranche.Header;
Label Ltranche = (Label)SPtranche.Children[1];
String Stranche = (String)Ltranche.Content;
//str.Append("Poste : " + Sposte + " | Tranche : " + Stranche + " | indice : " + incb + " \n");
if (tranche != null) {
StackPanel stack = (StackPanel)tranche.Header;
Label lbl = (Label)stack.Children[1];
String nom = lbl.Content.ToString();
tr_folio.Items.Clear();
_folio = getDossier(nom, _tranche);
//ne filtre rien
_folio.getDossiers("a*");
_folio.getFichiers();
tr_folio.Items.Add(Utils.TreeUtils.ContenuDossier(_folio));
lbl_source.Content = _folio.Chemin;
TreeViewItem entete = (TreeViewItem)tr_folio.Items[0];
entete.IsExpanded = true;
}
//MessageBox.Show(incb.ToString());
tranche.IsSelected = false;
}
poste.IsSelected = false;
pgrB.Value++;
Thread.Sleep(1);
this.UpdateLayout();
Вы должны запустить свой код либо в фоновом потоке или в методе асинхронным. Вы блокируете основной поток, и это не очень хорошее решение. –
Разделите задание и используйте 'DispacherTimer', чтобы выполнить задание или поместить задание в' Task' (при вызове пользовательских интерфейсов). – Sinatr
Удалите весь этот код и используйте надлежащие XAML и привязку данных. –