2

我正在编写一个客户端应用程序,将数据从用户计算机推送到网站。我希望这个应用程序每 60 秒更新一次网站。现在我的函数被包裹在一个无限循环中,睡眠时间为 45 秒。但是,Windows 表示即使更新了网站,该应用程序也没有响应。这是我的代码的结构。

4

2 回答 2

3

您的问题是您的 while 循环阻塞了 UI 线程。要解决此问题,您需要在单独的线程上运行代码。

最简单的方法开始..可能是使用Timer

System.Timers.Timer timer = new System.Timers.Timer(45000); // timer will execute every 45 seconds

timer.Elapsed += (sender, e) => {
    // your upload code here
};

timer.Start();

不过,您绝对应该在稍后阶段研究线程。也许是一个BackgroundWorker或任务并行库。

于 2013-07-17T22:08:31.263 回答
1

Thread.Sleep(...) 阻塞UI 线程指定的毫秒数。一种方法是使用Task.Delay(..)不阻塞 UI 线程,而是同时等待 45 秒:

private async void button1_Click(object sender, EventArgs e)
{
    running = true;

    while (running)
    {
        //your code

        await System.Threading.Tasks.Task.Delay(4500);
    }
}
于 2013-07-17T22:31:11.870 回答