【问题标题】:WCF+ timer. A bad practice?WCF+ 计时器。不好的做法?
【发布时间】:2015-04-11 08:52:08
【问题描述】:

我希望我的服务能够启动与其他服务的通信。

为了让它像客户端一样启动通信,我认为在构造函数计时器中初始化,每 x 秒调用一个方法可能是个好主意。

这是个坏主意吗?

【问题讨论】:

    标签: c# wcf timer communication


    【解决方案1】:

    我看不出这种方法有什么问题。

    您可以使用 System.Timers.Timer - https://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx

    将其 Interval 设置为您希望引发 Elapsed 计时器事件的值。使用您实现的事件处理程序订阅 Elapsed 事件,您将在其中与外部服务进行通信。

    编辑:简单示例

     class Program
        {
            private static void timer_ElapsedEventHandler(object sender, EventArgs e)
            {
                // communicate to external service
                Console.WriteLine("ElapsedEventHandler fired");
            }
    
            static void Main(string[] args)
            {
                var timer = new System.Timers.Timer();
                timer.Interval = 3000;
                timer.Elapsed += timer_ElapsedEventHandler;
                timer.Start();
                Console.WriteLine("Timer started");
    
                Console.ReadLine();
            }
        }
    

    【讨论】:

    • 嘿,谢谢!我会等着看我是否收到更多回复并将您的回复标记为答案。顺便说一句,您提供的链接是波兰语!这是英文版msdn.microsoft.com/en-us/library/…
    • 对链接很抱歉。更新了它。祝你好运:)
    • 顺便说一下你初始化timer 而不是DispatcherTimer,我读到它不一样,因为它们运行的​​线程。就我而言,没有表格,所以DispatcherTimer 是正确的吗?
    • 我已经从 System.Windows.Threading 命名空间初始化了 DispatcherTimer。 Dispatcher 计时器不限于单个线程,这意味着每个线程都有自己的 Dispatcher。该事件在与调度程序相同的线程上触发。如果您希望您的操作在单独的线程上运行,那么您应该使用 System.Threading.Timer 或 System.Timers.Timer。我刚才提到的两个定时器非常相似,主要区别在于 System.Timers.Timer 的 SynchronizationObject 属性,但我不相信它会影响你的情况。
    • 天哪!我已经对其进行了调查,并且 DispatcherTimer 无法从控制台应用程序的 Main 方法正常工作,因为当 Main 方法的执行完成时 - 它的进程已结束,因为应用程序的后台没有其他线程在运行(正如我在一个以上 cmets - DispatcherTimer 的事件在与其实例“lives”相同的线程上触发)。很抱歉误导了你。我已经更新了我的答案。我希望我在写那条评论时真的想到了这一点……
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多