我正在尝试制作一个每 10 分钟执行 10 个不同 SQL 查询的应用程序,并且在每个 SQL 查询之间应该有一个短暂的延迟(例如,1 秒)。
如果我尝试使用Thread.Sleep(1000);
,其他计时器停止并且整个应用程序冻结。
知道如何在不冻结应用程序或停止其他计时器的情况下执行此操作吗?
我正在尝试制作一个每 10 分钟执行 10 个不同 SQL 查询的应用程序,并且在每个 SQL 查询之间应该有一个短暂的延迟(例如,1 秒)。
如果我尝试使用Thread.Sleep(1000);
,其他计时器停止并且整个应用程序冻结。
知道如何在不冻结应用程序或停止其他计时器的情况下执行此操作吗?
您可以使用线程来启动另一个执行这些操作的线程。
最简单的形式是System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)
它需要一个委托,它消耗一个单一的object
并执行任务。
例如
private void Worker(object ignored)
{
//Run first query
Thread.Sleep(1000);
//Run second query etc.
}
//The following code is where you want to start the process
//For instance in response to a timer
ThreadPool.QueueUserWorkItem(Worker);
对于每个计时器的执行,您应该启动一个新线程来执行您的 SQL 查询代码。
我认为您所说的是每 10 分钟您需要触发 10 个 SQL 查询,并且您希望在每个查询之间暂停。
第一个问题,您是否希望在下一个开始之前完成并在它们之间添加 1 秒?或者每隔 1 秒启动一次,但所有可能同时运行?
您是在主 UI 线程(坏主意)还是工作线程中运行这些?
根据您的问题,我认为您正在主线程中运行它们。而是创建一个每 10 分钟触发一次的工作线程。如果没有工作线程,您的系统将在查询需要一段时间时冻结。
如果您希望一个线程完成和下一个线程开始之间有 1 秒的时间,您可以将 Sleep(1000) 调用放在工作线程中。
如果你想在每个开始之间有 1 秒,你需要 10 个工作线程。第一个将设置第二个在 1 秒内触发,然后调用它的查询。第二个将设置第三个在 1 秒内触发,然后开始它的查询。