Как подождать в приложении WinForms X секунд без зависания пользовательского интерфейса? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть этот код, но API имеет ограниченное количество запросов в минуту, поэтому я иногда получаю ошибку 429. Мне нужно подождать около минуты, но пользовательский интерфейс WinForm перестает отвечать (я предполагаю, что я останавливаю поток, когда пользовательский интерфейс делает это ?). Каким будет правильный способ реализовать это?

Код:

public static int sleepTime { get; set; } = 60000;


public static string GetData(string URL)
{
    while (true) {
        try
        {
            Controller.SetAppStatus(AppStatusses.FetchingData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string rt = reader.ReadToEnd();
            return rt;
        }
        catch 
        {
            Controller.SetAppStatus(AppStatusses.Timeout);
            Timeout();
        }
    }
}

public static async void Timeout() {
    await Task.Delay(sleepTime);
}

1 Ответ

0 голосов
/ 12 июля 2020

Используйте HttpClient class: ms docs , это рекомендуемый способ выдачи запросов, и он имеет async методы, поэтому вы можете сделать свой logi c асинхронным, и вы не будете блокировать пользовательский интерфейс нить. Кроме того, вы должны await метод Timeout и вернуть из него Task, чтобы блокировка не происходила.

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