В приложении WPF у меня есть следующий обработчик нажатия кнопки в файле с выделенным кодом окна:
private void AddNewRecBtn_Click(object sender, RoutedEventArgs e)
{
DimRec.Visibility = System.Windows.Visibility.Visible;
PrBarLayer.Visibility = System.Windows.Visibility.Visible;
try
{
WriteAndClose();
}
catch (Exception)
{
throw;
}
}
Эти строки кода:
DimRec.Visibility = System.Windows.Visibility.Visible;
PrBarLayer.Visibility = System.Windows.Visibility.Visible;
просто сделайте видимым прямоугольник DimRec
с Opacity="0.5" Fill="Gray"
для затемнения окна при отображении ProgressBar и StackPanel PrBarLayer
с самим ProgressBar.
Метод WriteAndClose();
выполняет множество вещей, включая запрос LINQ to SQL и интенсивную визуализацию на экране, которая занимает несколько секунд (пока он не происходит, на экране ничего не происходит, все кажется зависшим).
В течение этого периода в несколько секунд я хотел бы показать пользователю затемненный элемент управления окном и анимированный индикатор выполнения, но проблема в том, что эти слои, которые код делает видимыми, на самом деле не появляются. Если я удаляю метод WriteAndClose();
из этого обработчика, все в порядке - ProgressBar становится видимым.
Похоже, что WPF не визуализирует визуальные элементы управления сразу, а затем ресурсы переходят к следующему методу WriteAndClose
, все зависает, а затем отображается экран, когда все уже сделано, и видимость слоя индикатора выполнения становится свернутой .
Какое может быть решение? Как я мог заставить ProgressBar показывать сначала и только потом делать оставшиеся тяжелые вещи?