当前位置:  开发笔记 > 编程语言 > 正文

C#Windows Service While循环

如何解决《C#WindowsServiceWhile循环》经验,为你挑选了1个好方法。

我有一个Windows服务的问题.

protected override void OnStart(string[] args)
{
    while (!File.Exists(@"C:\\Users\\john\\logOn\\oauth_url.txt"))
    {
        Thread.Sleep(1000);
    }
...

我必须等待一个特定的文件,因此while循环是必要的,但服务将无法像这样循环启动.我可以做什么来运行正在运行的服务和检查文件是否存在的机制?



1> TheVillageId..:

最好的选择是System.Timers.Timer在您的服务中使用计时器.

System.Timers.Timer timer = new System.Timers.Timer();

在构造函数中添加Elapsed事件的处理程序:

timer.Interval = 1000; //miliseconds
timer.Elapsed += TimerTicked;
timer.AutoReset = true;
timer.Enabled = true;

然后在OnStart方法中启动那个计时器:

timer.Start();

在事件处理程序中完成您的工作:

private static void TimerTicked(Object source, ElapsedEventArgs e)
{
    if (!File.Exists(@"C:\Users\john\logOn\oauth_url.txt"))
        return;

    //If the file exists do stuff, otherwise the timer will tick after another second.
}

最小的服务类看起来有点像这样:

public class FileCheckServivce : System.ServiceProcess.ServiceBase  
{
    System.Timers.Timer timer = new System.Timers.Timer(1000);

    public FileCheckServivce()
    {
        timer.Elapsed += TimerTicked;
        timer.AutoReset = true;
        timer.Enabled = true;
    }

    protected override void OnStart(string[] args)
    {
        timer.Start();
    }

    private static void TimerTicked(Object source, ElapsedEventArgs e)
    {
        if (!File.Exists(@"C:\Users\john\logOn\oauth_url.txt")) 
            return;

        //If the file exists do stuff, otherwise the timer will tick after another second.
    }
}

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有