【问题标题】:Where can I find a good C# console app that demonstrates polling?在哪里可以找到演示轮询的优秀 C# 控制台应用程序?
【发布时间】:2011-06-03 17:02:01
【问题描述】:

我正在寻找一个用 C# 进行轮询的好例子。

基本上,每 X 秒读取一次仪器,并将值记录到文本文件中。我正在寻找一个使用 .NET 4 的并行库的示例。或者,也许我通过查看 TPL 来过度考虑这个解决方案......

ps- 这个问题与我之前关于数据库轮询的问题无关。

【问题讨论】:

    标签: c# .net-4.0 polling


    【解决方案1】:

    我不确定我是否会特别在意 TPL。只需使用System.Threading.TimerSystem.Timers.Timer 定期执行操作。它们都将使用线程池 - 在此期间您打算在主控制台线程中做什么?

    当然,另一个非常简单的选择是让主线程在轮询发生之间休眠。这很粗糙,但如果这是您的应用程序需要做的全部,那么它对您来说可能已经足够好了。我不确定如果系统时钟发生变化它会如何表现,请注意......这是用于生产使用的非常长时间运行的任务,还是只是一个快速工具? (如果它是一个长时间运行的应用程序,您可能需要考虑改用 Windows 服务。)

    【讨论】:

    • 这将用于长期运行的生产用途,我正在考虑使用 Windows 服务。我们现在正在制作原型,看看所有部分是如何组合在一起的。除非我们找到令人信服的理由将其保留为控制台应用程序,否则此组件可能最终会成为一项服务。
    • @SpecialAgent_W436:在那种情况下,我可能会选择其中一个计时器类。两者都非常易于使用。
    【解决方案2】:

    创建计时器真的很容易:

    static void Main(string[] args)
    {
        // Create a timer that polls once every 5 seconds
        var timer = new System.Threading.Timer(TimerProc, null, 5000, 5000);
        Console.WriteLine("Polling every 5 seconds.");
        Console.WriteLine("Press Enter when done:");
        Console.ReadLine();
        timer.Dispose();
    }
    
    static int TickCount = 0;
    static void TimerProc(object state)
    {
        ++TickCount;
        Console.WriteLine("tick {0}", TickCount);
    }
    

    请注意,TimerProc 是在单独的线程上调用的。您的主程序可以做其他事情,这将继续每五秒轮询一次,直到您终止(或修改)计时器。

    我更喜欢System.Threading.Timer 而不是System.Timers.Timer,因为后者会吞下异常。如果您的 elapsed 事件处理程序中存在引发异常的错误,您将永远不会知道它,因为System.Timers.Timer 事件处理程序将抑制该异常。因此,我强烈建议您不要使用它。请改用System.Threading.Timer

    【讨论】:

      【解决方案3】:

      对我来说,使用 PL 来完成这项任务并不正确。我建议查看System.Timer,您可以使用它指定在应用程序中引发 Elapsed 事件的重复间隔,从而允许您处理事件以执行常规处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2017-03-06
        • 2019-07-03
        • 1970-01-01
        相关资源
        最近更新 更多