2014-09-01 38 views
0

我第一次尝试在我的Windows服务应用程序中使用Thread。现在根据我的条件我必须从数据库读取数据,并且如果它与我必须执行的条件匹配一个函数在新的线程中。现在主要关心的是,因为我的函数意味着在新的线程中执行是漫长的,并且需要时间,所以我有一个查询,我的程序将达到数据读取器代码并从数据库,而我的函数继续在线程后台执行。我的应用程序执行逻辑是时间特定的。 这里是代码..读取数据库值并执行新线程

while (dr.Read()) 
{ 

    time = dr["SendingTime"].ToString(); 

    if ((str = DateTime.Now.ToString("HH:mm")).Equals(time)) 
    { 

     //Execute Function and send reports based on the data from the database. 

     Thread thread = new Thread(sendReports); 
     thread.Start(); 
    } 
} 

请帮助我..

+0

所以你在问什么?如何激发一个新线程(你做了什么),或者如何避免再次调用它,并且你有新的数据进来? – Noctis 2014-09-01 05:20:32

+0

@Noctis我想知道,如果我的第一个线程正在运行该函数。我的代码将再次到达数据读取器并执行新的线程。 – user3924730 2014-09-01 05:22:26

+0

@Noctis R你呢? – user3924730 2014-09-01 05:32:52

回答

1

是的,正如评论所说,你将有每行一个线程。如果你有4-5行,并且你会运行这个代码,你会得到4-5个线程愉快地在后面工作。

您可能会对此感到满意,并放弃它,半年后,其他人会玩数据库,您将获得10K行,这将创建10K个线程,并且您将会一个假期和人们会叫你恐慌,因为程序被破坏...

换句话说,你不想这样做,因为这是一个不好的做法。
您应该使用带有工作单元的队列,并且从这些队列中读取固定数量的线程(在这种情况下,您可能会有10K个单元,但可以说10个线程将接收并处理它们,直到它们为止完成)或其他一些机制来确保您不会每行创建一个线程。

除非当然,你不在乎......