C# Winform 每 10 秒从 API 获取数据并保存在文件夹中

Posted

技术标签:

【中文标题】C# Winform 每 10 秒从 API 获取数据并保存在文件夹中【英文标题】:C# Winform get data from API every 10 seconds and save in folder 【发布时间】:2019-09-29 13:28:48 【问题描述】:

我想每 10 秒向 API 发送 POST 数据并接收数据。接下来我想将接收到的数据解析为 json 并保存到文件中。我不想阻止用户界面。方法将 24 小时有效。

这是一个 C# Winforms 程序,用于从 API 下载数据并将其保存在本地磁盘上。

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

我期待轻量级解决方案 :)

【问题讨论】:

您的代码并未真正反映您的问题。 欢迎来到 SO!请看看如何提出正确的问题:meta.***.com/questions/252585/…。我们不编写您的代码。 我建议你使用后台工作者来防止阻塞 UI 线程。您也可以使用计时器来安排您的操作。每 10 秒调用一次 bgworker 中的 api。 【参考方案1】:

你的问题其实可以分为三个部分 1. 每 10 秒发布一次 => Timer + WebClient 2. 获取数据,转换成JSON然后保存到文件 => JsonConvert + File.WriteAllText() 3. 不要阻塞 UI(我假设是请求线程本身)=> 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));

【讨论】:

以上是关于C# Winform 每 10 秒从 API 获取数据并保存在文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

STM32 每 10 秒从待机模式唤醒

C# winform生成天气预报(转)

WinForm C# 获取屏幕真实分辨率

WinForm C# 获取屏幕真实分辨率

WinForm C# 获取屏幕真实分辨率

在C#中如何实现winform窗体的全屏截图功能