C# уведомление во время выполнения методов в c#. Возможно ли такое?

Мне стало интересно. У меня, например, есть программа с графическим интерфейсом на WPF. При каждом выполнении методов (например после нажатия кнопки, когда данные берутся из бд) программа выполняет инструкции, но в это время (если это правильно сказано) блокируется поток и складывается ощущение что программа "зависает". Таких методов много и на каждый писать дополнительный метод, который открывает поток, чтобы показать уведомление по типу "подождите..." мне показалось затратным.

Так вот собственно вопрос: Есть ли такая "функция", которая при каждом таком "зависании" выполняет вывод на экран сообщения "Подождите..." и убирает его по окончанию работы метода?

Извините, если непонятно объяснила или если этот вопрос глуп.


Ответы (1 шт):

Автор решения: GromWolf

В 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. у меня лично было реализованно таким образом, надеюсь этот метод подойдет и вам. С уважением и удачи.

→ Ссылка