c# - Windows 服务中的无限 while 循环

标签 c# windows-services infinite-loop

我有一个窗口,我在其中的 OnStart() 方法中添加了一个无限循环。我已经对该服务进行了 1 小时的测试,它运行良好。但因为这是我的第一个 Windows 服务 所以怀疑无限循环的性能。 这是代码..

 protected override void OnStart(string[] args)
    {
       while(true){

        string Query="";

        Query = "SELECT * FROM 'reportsetting` order by SendingTime;";

        MySqlConnection con = new MySqlConnection(conn);
        MySqlCommand comm = new MySqlCommand(Query, con);
        con.Open();
        MySqlDataReader dr = comm.ExecuteReader();
        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();

            }


        }


            //Halt for this Moment

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


            }


         }

        }

    public void sendReports() { 



    }

所以想知道它是否可以长期运行。谢谢..

最佳答案

每 40 秒重新运行一次查询:

private const string Query = "SELECT * FROM 'reportsetting` order by SendingTime;"

protected override void OnStart(string[] args)
{
    _timer = new Timer(40 * 1000); // every 40 seconds
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    _timer.Start(); // <- important
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    MySqlConnection con = new MySqlConnection(conn);
    MySqlCommand comm = new MySqlCommand(Query, con);
    con.Open();
    MySqlDataReader dr = comm.ExecuteReader();
    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();
        }
    }
}

类似的东西。 正如 Groo 所提到的,您可能希望每次都处理连接,这样您就不会在内存中徘徊。

关于c# - Windows 服务中的无限 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25580630/

相关文章:

检测到 C# 无法访问的代码

java - 如何在单台机器上运行同一窗口服务(java)的多个实例

mysql - 错误 1067 : The process terminated unexpectedly MYSQL, Windows Server 2008 R2

c# - Windows服务在指定时间运行一个函数

Java:无限循环约定

java - 我的代码遇到了运行时错误,有人可以帮我找出我哪里错了

php - Facebook SDK (5.0) - 图形 API 请求 - 分页(如何获得所有结果)

c# - WPF 应用程序 - 存储单词列表的方法?

c# - 如何从 SQL Server 代理运行作业?

c# - Umbraco 7.1.4 Media Manager,删除后Id存在