c # wpf Индикатор выполнения в другом окне - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь понять, как использовать индикатор выполнения в моем приложении.У меня есть форма выхода из системы в качестве главного окна.И я хочу дополнительное окно для индикатора выполнения.В моем коде основного окна есть 15-секундный сон.Я бы хотел, чтобы пользователь видел прогресс на панели прогресса, и если 15 секунд закончились, панель прогресса должна закрыться.Я хочу знать, есть ли какой-нибудь способ для меня поместить код индикатора выполнения в мой код главного окна.Или, может быть, способ взаимодействия индикатора выполнения с 15-секундным временем ожидания.

Я новичок в кодировании, поэтому объяснение кода очень полезно для меня, чтобы понять код.

заранее спасибо.

мой код в окне индикатора выполнения:

public partial class ProgressBar : Window
    {
        public ProgressBar()
        {
            InitializeComponent();
        }

        private void Window_ContentRendered(object sender, EventArgs e)
        {
            for (int i = 0; i <= 15; i++)
            {
                pbStatus.Value++;
                System.Threading.Thread.Sleep(1000);
            }
        }
    }

my progressbar.xaml:

<Window x:Class="Sessie_Afmeld_Applicatie.ProgressBar"
         WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Sessie_Afmeld_Applicatie"
        mc:Ignorable="d"
        Title="Voortgang" Height="100" Width="300">
    <Grid>
        <ProgressBar Minimum="0" Maximum="150" Name="pbStatus"  Margin="25,23,37,23" Foreground="#FF13B931" ValueChanged="pbStatus_ValueChanged"   />
        <Label Content="Label" HorizontalAlignment="Left" Margin="125,66,0,0" VerticalAlignment="Top"/>
    </Grid>
</Window>

1 Ответ

0 голосов
/ 31 мая 2018

Вы не можете спать или делать что-то еще, что блокирует поток пользовательского интерфейса, если вы хотите иметь возможность взаимодействовать с вашим приложением в это время.

Вы должны выполнять любую тяжелую и потенциально длительную работу в фоновом потоке.В вашем конкретном примере вы можете использовать метод Task.Delay для асинхронного ожидания:

public partial class ProgressBar : Window
{
    public ProgressBar()
    {
        InitializeComponent();
    }

    private async void Window_ContentRendered(object sender, EventArgs e)
    {
        for (int i = 0; i < 15; i++)
        {
            pbStatus.Value++;
            await Task.Delay(1000);
        }
        Close();
    }
}

Если вы вызываете метод службы или аналогичный, вы можете использовать параллельную библиотеку задач (TPL) и запустить новый Task.Это довольно большая тема, хотя.Пожалуйста, обратитесь к MSDN для получения дополнительной информации: https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-parallel-library-tpl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...