Задать вопрос

Blazor-server приложение: как сделать на странице динамически обновляемую переменную?

при вызове StartCountDowan происходит динамическое уменьшение счетчика,
при вызове ListFiles - изменения счетчика не происходит, подскажите, как решить эту проблему?

@page "/"

@using System
@using System.Net
@using System.IO
@using System.Globalization
@using System.Diagnostics
@using System.Threading

<h1>@count</h1>
<button @onclick="@StartCountDown">Start Countdown</button>
<button @onclick='@(() => ListFiles("ftp://ftpurl/"))'>Read</button>

@code {
   
    private int count { get; set; } = 10;

    protected override void OnInitialized()
    {
    }

    private async Task StartCountDown()
    {
        var timer = new Timer(new TimerCallback(_ =>
        {
            if (count <= 0) return;
            count--;
            InvokeAsync(() =>
            {
                StateHasChanged();
            });
        }), null, 1000, 1000);
    }

    private async Task ListFiles(string ftpPath)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath);
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        request.Credentials = new NetworkCredential("Anonymous", "user@mail");
        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        using (Stream responseStream = response.GetResponseStream())
        using (StreamReader reader = new StreamReader(responseStream))
        {
            string line = reader.ReadLine();
            while (!string.IsNullOrEmpty(line))
            {
                ...
                await InvokeAsync(() =>
                {
                    count++;
                    StateHasChanged();
                });
                Debug.WriteLine (line); // вывод  работаем корректно
                ...                
                line = reader.ReadLine();                
            }
        }
    }  
}
  • Вопрос задан
  • 218 просмотров
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы