C # Winform получает данные из API каждые 10 секунд и сохраняет в папке - PullRequest
0 голосов
/ 12 мая 2019

Я хочу отправлять данные POST в API и получать данные каждые 10 секунд.Далее я хочу разобрать полученные данные в json и сохранить в файл.Я не хочу блокировать пользовательский интерфейс.Метод будет работать 24 часа.

Это программа C # Winforms для загрузки данных из API и сохранения их на локальном диске.

            printerThread = new Thread(new ThreadStart(InvokeMethod))
            {
                IsBackground = true
            };
            printerThread.SetApartmentState(ApartmentState.STA);
            printerThread.Start();

Я ожидаю легкого решения:)

1 Ответ

0 голосов
/ 13 мая 2019

Ваш вопрос на самом деле можно разделить на три части
1. Публиковать каждые 10 секунд => Timer + WebClient
2. Получить данные, преобразовать в JSON, затем сохранить в файл => JsonConvert +File.WriteAllText()
3. Не блокируйте пользовательский интерфейс (и я предполагаю, что сам поток запросов) => async await

Вы не включили структуру данных, но я полагаю, что вы можете проверить JsonConvertсебя, быстрый пример для отдыха.

Timer timer = new Timer(async (state) =>
{
    string feedback = "";
    try
    {
        var uriOfAPI = new Uri("http://httpbin.org/post");
        using (WebClient webClient = new WebClient())
        {
            webClient.Headers["ContentType"] = "application/json";
            feedback = await webClient.UploadStringTaskAsync(uriOfAPI, "POST", "whatever the input should be");
        }
    }
    catch (Exception)
    {
        // how you are going to handle when API malfunction
    }

    // feedback convert to json(in this example, it already is)

    File.WriteAllText(@".\output.txt", feedback);

}, null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(10));
...