C# уведомление во время выполнения методов в c#. Возможно ли такое?
Мне стало интересно. У меня, например, есть программа с графическим интерфейсом на WPF. При каждом выполнении методов (например после нажатия кнопки, когда данные берутся из бд) программа выполняет инструкции, но в это время (если это правильно сказано) блокируется поток и складывается ощущение что программа "зависает". Таких методов много и на каждый писать дополнительный метод, который открывает поток, чтобы показать уведомление по типу "подождите..." мне показалось затратным.
Так вот собственно вопрос: Есть ли такая "функция", которая при каждом таком "зависании" выполняет вывод на экран сообщения "Подождите..." и убирает его по окончанию работы метода?
Извините, если непонятно объяснила или если этот вопрос глуп.
Ответы (1 шт):
В XAML добавить вот такую форму, которая будет служить экраном загрузки:
<Grid Name="ProcessScreen" Visibility="Visible" Grid.RowSpan="10" Grid.ColumnSpan="10">
<Grid.RowDefinitions>
<RowDefinition Height="100*"/>
<RowDefinition Height="30*"/>
<RowDefinition Height="100*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="500"/>
<ColumnDefinition Width="100*"/>
</Grid.ColumnDefinitions>
<DockPanel Background="Black" Opacity="0.9" Grid.ColumnSpan="3" Grid.RowSpan="3"></DockPanel>
<TextBlock Name="Process2TB" Grid.Column="1" Grid.Row="1" Text="Выполняется формирование запроса, пожалуйста подождите!" TextWrapping="Wrap" Foreground="White" TextAlignment="Center" FontSize="16" ></TextBlock>
<TextBlock Name="ProcessTB" Text="Процесс" Height="18" Visibility="Visible" Foreground="White" FontSize="10" VerticalAlignment="Center" Margin="0,5,0,0" TextWrapping="Wrap" HorizontalAlignment="Left" TextAlignment="Center" Grid.Column="1" Grid.Row="4" ></TextBlock>
<ProgressBar Name="ProcessPB" Background="#FF686868" Visibility="Visible" Grid.Row="4" Grid.Column="1" Height="20" VerticalAlignment="Center" Margin="0,50,0,0" Maximum="100" Foreground="#FF003AFF" BorderBrush="#FF007ACC"/>
</Grid>
В C# добавьте это (функция отображения и запуска экрана):
private void Button_Click(object sender, RoutedEventArgs e)
{
FunctionThread = new Thread(new ThreadStart(VashZapros));
FunctionThread .Priority = ThreadPriority.Highest;
FunctionThread .Start();
}
public void VashZapros()
{
this.Dispatcher.Invoke(() =>
{
ProcessScreen.Visibility = Visibility.Visible;
ProcessPB.Visibility = Visibility.Visible;
ProcessTB.Visibility = Visibility.Visible;
ProcessTB.Text = "Загрузка запроса";
});
//ТУТ ВАШ КОД, который делает запросы и тд
//или напишите хендлер, который будет отлавливать окончания работы вашего запроса
//и соответсвенно закрывать экран загрузки, но можно и без него, просто вставлять
//такую конструкцию в каждый запрос, быстро и не так много
this.Dispatcher.Invoke(() =>
{
ProcessPB.Value = ProcessPB.Maximum;
ProcessPB.Visibility = Visibility.Hidden;
ProcessTB.Visibility = Visibility.Hidden;
ProcessScreen.Visibility = Visibility.Hidden;
});
}
P.S. у меня лично было реализованно таким образом, надеюсь этот метод подойдет и вам. С уважением и удачи.