欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

ASP.NET 定时器回调方法的重入

时间:2021-05-17 08:39:37|栏目:.NET代码|点击:

话不多说,请看代码:

using System;
using System.Collections.Generic;
using System.Text;
namespace NET.MST.Sixth.Reenter
{
  class Reenter
  {
    //用来造成线程同步问题的静态成员
    private static int TestInt1=0;
    private static int TestInt2 = 0;
    private static object locko = new object();
    static void Main(string[] args)
    {
      Console.WriteLine("System.Timers.Timer 回调方法重入测试:");
      TimersTimerReenter();
      //这里确保已经开始的回调方法有机会结束
      System.Threading.Thread.Sleep(2 * 1000);
      Console.WriteLine("System.Threading.Timer 回调方法重入测试:");
      ThreadingTimerReenter();
      Console.Read();
    }
    /// <summary>
    /// 展示System.Timers.Timer的回调方法重入
    /// </summary>
    static void TimersTimerReenter()
    {
      System.Timers.Timer timer = new System.Timers.Timer();
      timer.Interval = 100;    //100毫秒
      timer.Elapsed += TimersTimerHandler;
      timer.Start();
      System.Threading.Thread.Sleep(2 * 1000); //运行2秒
      timer.Stop();
    }
    /// <summary>
    /// 展示System.Threading.Timer的回调方法重入
    /// </summary>
    static void ThreadingTimerReenter()
    {
      //100毫秒
      using (System.Threading.Timer timer = new System.Threading.Timer
       (new System.Threading.TimerCallback(ThreadingTimerHandler), null, 0, 100))
      {
        System.Threading.Thread.Sleep(2 * 1000); //运行2秒
      }
    }
    /// <summary>
    /// System.Timers.Timer的回调方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    private static void TimersTimerHandler(object sender,EventArgs args)
    {
      lock (locko)
      {
        Console.WriteLine("测试整数:" + TestInt1.ToString());
        //睡眠10秒,保证方法重入
        System.Threading.Thread.Sleep(300);
        TestInt1++;
        Console.WriteLine("自增1后测试整数:" + TestInt1.ToString());
      }
    }
    /// <summary>
    /// System.Threading.Timer的回调方法
    /// </summary>
    /// <param name="state"></param>
    private static void ThreadingTimerHandler(object state)
    {
      lock (locko)
      {
        Console.WriteLine("测试整数:" + TestInt2.ToString());
        //睡眠10秒,保证方法重入
        System.Threading.Thread.Sleep(300);
        TestInt2++;
        Console.WriteLine("自增1后测试整数:" + TestInt2.ToString());
      }
    }
  }
}

上一篇:C#飞行棋小程序设计分析

栏    目:.NET代码

下一篇:详解WMI RPC 服务器不可用的解决方案

本文标题:ASP.NET 定时器回调方法的重入

本文地址:http://www.codeinn.net/misctech/122918.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有