文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>浅谈C#中的多线程编程[3]

浅谈C#中的多线程编程[3]

时间:2011-03-09  来源:Ellic

  之前复习了有关Thread类的相关知识,最后复习下有关定时器Timer的使用方法。
  Timer类的继承层次为System.Object-System.MarshallByRefObject,其构造函数有下面的几种重载方式:
  
  Timer类是一个定时器,定时执行用户指定的函数,当定时器启动后,系统自动建立一个新的线程,执行指定的函数,我们可以通过下面的方式来初始化一个Timer对象:
  Timer timer = new Timer(timerDelfgate,obj,0,1000);
  第一个参数是TimerCallback委托,表示要执行的方法;
  第二个参数是一个包含回调方法要使用的信息的对象,可以为空引用;
  第三个参数是延迟执行的时间,单位是毫秒,若为"0",表示立即开始。
  第四个参数是指定时器的时间间隔,每隔那么长的一段时间,TimerCallBack所代表的方法将被调用一次,单位是毫秒。

  Timer类所持有的方法如下:
  

  下面是Timer类的示例代码:
  

View Code
using System;
using System.Threading;

class TimerExample
{
static void Main()
{
// Create an event to signal the timeout count threshold in the
// timer callback.
AutoResetEvent autoEvent = new AutoResetEvent(false);

StatusChecker statusChecker
= new StatusChecker(10);

// Create an inferred delegate that invokes methods for the timer.
TimerCallback tcb = statusChecker.CheckStatus;

// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString(
"h:mm:ss.fff"));
Timer stateTimer
= new Timer(tcb, autoEvent, 1000, 250);

// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(
0, 500);
Console.WriteLine(
"\nChanging period.\n");

// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine(
"\nDestroying timer.");
}
}

class StatusChecker
{
private int invokeCount;
private int maxCount;

public StatusChecker(int count)
{
invokeCount
= 0;
maxCount
= count;
}

// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent
= (AutoResetEvent)stateInfo;
Console.WriteLine(
"{0} Checking status {1,2}.",
DateTime.Now.ToString(
"h:mm:ss.fff"),
(
++invokeCount).ToString());

if(invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}

  最后为了把知识运用到实践中,用Timer类实现了一个定时关灯的小程序:
  
  学到致用,的确是这样的,感觉只有真正实践,去写代码才能把知识学牢固,这是最大的一个收获。
  
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载