我正在编写一个客户端应用程序,将数据从用户计算机推送到网站。我希望这个应用程序每60秒更新一次网站。现在我的功能包含在一个无限循环中,休眠时间为45秒。但是,Windows表示该应用程序即使更新网站也没有响应。以下是我的代码的结构。
答案 0 :(得分: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
或任务并行库。
答案 1 :(得分: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);
}
}