文件传输(三)关于计时器

文件传输设计成在后台执行的Windows Services,在配置文件中定义执行数据上传下载的时间,这样就需要定义个Timer来检查指定的时间是否到达,以便执行相应的操作,在.NET中有几个类库中有Timer的定义,具体的内容可以查看MSDN。

我使用了空间System.Timers里的Timer,Timer可以设置时间间隔,每隔一定的时间执行由ElapsedEventHandler定义的事件,由于网络不稳定,所以断线的情况时有发生,所以我们要定义一个时间段,在这个时间段内,每隔一定的时间去检查一下是否有文件需要上传,但是由于网络传输的不确定性,隔多长时间去检查就是个问题了,由于System.Timers的Timer是多线程的,所以如果不加以处理会产生资源竞争的情况,比如定义了Timer的Interval是360000,即每隔6分钟去检查一下是否有文件需要上传或下载,如果上一个Timer所触发的ElapsedEventHandler事件还没处理完,又再次触发ElapsedEventHandler时间,就会出问题了,需要加把锁,通过System.Threading中的Interlocked去实现。
定义变量locaVar的值为0时执行事件处理程序对应的代码,在代码开始执行时

if (0 == Interlocked.Exchange(ref lockVar, 1))

执行完毕后,重置lockVar的值

//释放锁
                    Interlocked.Exchange(ref lockVar, 0);
原文地址:https://www.cnblogs.com/Farseer1215/p/1605655.html