java keep alive timer_Timer类.Elapsed执行时间很长>interval,事件还会重入

using System;

using System.Timers;

using System.Data;

public class Timer1

{

private static System.Timers.Timer aTimer;

public static void Main()

{

// Normally, the timer is declared at the class level,

// so that it stays in scope as long as it is needed.

// If the timer is declared in a long-running method,

// KeepAlive must be used to prevent the JIT compiler

// from allowing aggressive garbage collection to occur

// before the method ends. (See end of method.)

//System.Timers.Timer aTimer;

// Create a timer with a ten second interval.

aTimer = new System.Timers.Timer(10000);

// Hook up the Elapsed event for the timer.

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

// Set the Interval to 2 seconds (2000 milliseconds).

aTimer.Interval = 2000;

aTimer.Enabled = true;

Console.WriteLine("Press the Enter key to exit the program.");

Console.ReadLine();

// If the timer is declared in a long-running method, use

// KeepAlive to prevent garbage collection from occurring

// before the method ends.

//GC.KeepAlive(aTimer);

}

// Specify what you want to happen when the Elapsed event is

// raised.

private static void OnTimedEvent(object source, ElapsedEventArgs e)

{

DataTable dt = new DataTable();

dt.CaseSensitive = true;

//Create DataColumns

DataColumn col1 = new DataColumn("id", typeof(int));

DataColumn col2 = new DataColumn("UserName", typeof(string));

//Config Propertyies

col2.AllowDBNull = false;

col2.MaxLength = 50;

col2.Unique = true;

col1.AutoIncrement = true;

col1.AutoIncrementSeed = 100;

col1.AutoIncrementStep = 1;

col1.ReadOnly = true;

//the DataColumn with Expression

DataColumn col3 = new DataColumn("Expression", typeof(string));

col3.Expression = "id+UserName";

//add DataColumns to dt;

dt.Columns.Add(col1);

dt.Columns.Add(col2);

dt.Columns.Add(col3);

dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };

DataRow dr;

for (int i = 0; i < 100; i++)

{

dr = dt.NewRow();

dr[1] = "Roboth" + i;

dt.Rows.Add(dr);

}

foreach (DataRow row in dt.Rows)

{

Console.WriteLine(row["UserName"].ToString());

}

Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);

}

}

/* This code example produces output similar to the following:

Press the Enter key to exit the program.

The Elapsed event was raised at 5/20/2007 8:42:27 PM

The Elapsed event was raised at 5/20/2007 8:42:29 PM

The Elapsed event was raised at 5/20/2007 8:42:31 PM

...

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值