Установить WPF Mahapps Progress Dialog - PullRequest
       36

Установить WPF Mahapps Progress Dialog

1 голос
/ 24 февраля 2020

Я пытаюсь заменить ProgressBar на Progress Dialog, используя Mahapps.

Итак, я начал писать это:

private void btnClick(object sender, RoutedEventArgs e)
{ 
    ConfRelais();
}

public async void ConfRelais()
{
    var controller = await this.ShowProgressAsync("hey", "hoy");
    controller.Maximum = 128;
    while (flag == 0)
    {
        string data = RelayBoard_Port.ReadTo("\r\n");
        if (data == "ok") { controller.SetMessage("Done Process");
                            flag = 1; }
        else { controller.SetProgress(Int32.Parse(data)); }
    }
    await controller.CloseAsync();
}

Но диалоговое окно прогресса отображается только после его завершения .. Поскольку я все еще новичок в c#, может быть, я упускаю некоторые важные моменты для настройки такого рода функции.

1 Ответ

1 голос
/ 24 февраля 2020

Вы должны выполнить l oop в фоновом потоке:

public async void ConfRelais()
{
    var controller = await this.ShowProgressAsync("hey", "hoy");
    controller.Maximum = 128;
    await Task.Run(() =>
    {
        while (flag == 0)
        {
            string data = RelayBoard_Port.ReadTo("\r\n");
            if (data == "ok")
            {
                controller.SetMessage("Done Process");
                flag = 1;
            }
            else { controller.SetProgress(Int32.Parse(data)); }
        }
    });
    await controller.CloseAsync();
}

Один поток не может одновременно обновить пользовательский интерфейс и одновременно выполнить ваш l oop.

Вы также на самом деле не нужен флаг. Вы можете просто выйти из l oop, когда получите "ok":

while (true)
{
    string data = RelayBoard_Port.ReadTo("\r\n");
    if (data == "ok")
    {
        controller.SetMessage("Done Process");
        break;
    }
    else { controller.SetProgress(Int32.Parse(data)); }
}
...