NET中的三种Timer的区别和用法

NET中的三种Timer的区别和用法
NET中的三种Timer的区别和用法

.NET中有3个不同的定时器。这3个定时器分别是:

//1.实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。System.Windows.Forms.Timer

// 2.提供以指定的时间间隔执行方法的机制。无法继承此类。

System.Threading.Timer

//3.在应用程序中生成定期事件。

System.Timers.Timer

这三个定时器位于不同的命名空间内,上面大概介绍了3个定时器的用途,其中第一个是只能在Windows窗体中使用的控件。在.NET1.1里面,第3个System.Timers.Timer,也是可以拖拽使用,而.NET2.0开始取消了,只能手动编写代码。而后2个没有限制制。下面通过具体的列子来看3个Timer的使用和区别,网上谈的很多,但基本都没有代码。

一 System.Windows.Forms.Timer

#region System.Windows.Forms.Timer

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int num = 0;

private void Form_Timer_Tick(object sender, EventArgs e)

{

label1.Text = (++num).ToString();

Thread.Sleep(3000);

}

private void button1_Click(object sender, EventArgs e)

{

Form_Timer.Start();

}

private void button2_Click(object sender, EventArgs e)

{

Form_Timer.Stop();

}

}

#endregion

上面这个是一个很简单的功能,在Form窗体上拖了一个System.Windows.Forms.Timer控件名字为Form_Timer,在属性窗中把Enable属性设置为Ture,Interval是定时器的间隔时间。双击这个控件就可以看到 Form_Timer_Tick方法。在这个方法中,我们让她不停的加一个数字并显示在窗体上,2个按钮提供了对计时器的控制功能。

执行的时候你去点击其他窗体在回来,你会发现我们的窗体失去响应了。因为我们这里使用Thread.Sleep(3000);让当前线程挂起,而UI失去相应,说明了这里执行时候采用的是单线程。也就是执行定时器的线程就是UI线程。

Timer 用于以用户定义的事件间隔触发事件。Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。

在Timer内部定义的了一个Tick事件,我们前面双击这个控件时实际是增加了一行代码

this.Form_Timer.Tick += new System.EventHandler(this.Form_Timer_Tick);

这个应该明白,不明白的可以看我BLOG中有关委托和事件的文章。然后Windows将这个定时器与调用线程关联(UI线程)。当定时器触发时,Windows把一个定时器消息插入到线程消息队列中。调用线程执行一个消息泵提取消息,然后发送到回调方法中(这里的Form_Timer_Tick方法)。而这些都是单线程进行了,所以在执行回调方法时UI会假死。所以使用这个控件不宜执行计算受限或IO受限的代码,因为这样容易导致界面假死,而应该使用多线程调用的Timer。另外要注意的是这个控件时间精度不高,精度限定为 55 毫秒。我们把Interval设置为20ms,然后在start和stop方法中记录当前时,并计算出运行时间:

从上面图可以看到程序执行了7.8S也就是 7800ms,而间隔时间是20ms,也就是最后显示数字应该是390左右,但只有250,显然是不准确的,不过按MSDN说的55ms的精度,7800ms应该只执行了140多次或更少。不知道这里是不是理解有问题。

二 System.Timers.Timer

接下来就看下另一个Timer,我们用他来改写上面的程序

#region System.Windows.Forms.Timer

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int num = 0;

DateTime time1 = new DateTime();

DateTime time2 = new DateTime();

//定义Timer

System.Timers.Timer Timers_Timer = new System.Timers.Timer();

private void button1_Click(object sender, EventArgs e)

{

//手动设置Timer,开始执行

Timers_Timer.Interval = 20;

Timers_Timer.Enabled = true;

Timers_Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timers_Timer_Elapsed);

time1 = DateTime.Now;

}

void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

{

label1.Text = Convert.ToString((++num)); //显示到lable

Thread.Sleep(3000);

}

private void button2_Click(object sender, EventArgs e)

{

//停止执行

Timers_Timer.Enabled = false;

time2 = DateTime.Now;

MessageBox.Show(Convert.ToString(time2-time1));

}

}

#endregion

我们可以看到这个代码和前面使用Form.Timer的基本相同,不同的是我们是手动定义的对象,而不是通过拉控件。他也有Interval ,Enabled 等属性,作用和第一是一样的。不同的是他的事件名为Elapsed ,但是和上面的Tick一样,绑定一个委托的方法。只是这里我们是手动完成的。另外不同之处是Form.Timer我们可以用Stop和Start方法控制,而这里是通过Enable 属性控制。但实际上也可以用Stop和Start方法,内部也是通过他自己的Enable来控制的。

最大的不同就是上面的代码在调试时会报错,提示你"线程间操作无效: 从不是创建控件“label1”的线程访问它。"但如果你不调试直接运行是OK的,而且运行时你去拖动窗体会发现没有出现假死。从这里我们就可以知道这里的Timer的创建线程和执行线程不是同一个线程。也就是使用了多线程。Timer的创建线程是UI线程,而执行线程是TheardPool中的线程,所以不会假死,但调试的时候会报错,因为非控件的创建线程不能操作控件。但你可以直接运行,这里是VS05做了手脚。解决办法很多,用delegate.BeginInvoke()等等。这里介绍特有的一种方法,设置Timer的SynchronizingObject属性,

Timers_Timer.SynchronizingObject = label1;这样的话,我们的话,调试运行时就不会报错了,但是设置了这个属性Timer 就编程单线程调用了,就基本和第一个完全一样了。

Timer 是为在多线程环境中用于辅助线程而设计的。服务器计时器可以在线程间移动来处理引发的 Elapsed 事件,这样就可以比 Windows 计时器更精确地按时引发事件。Elapsed 事件在 ThreadPool 线程上引发。如果 Elapsed 事件的处理时间比Interval 长,在另一个 ThreadPool 线程上将会再次引发此事件。因此,事件处理程序应当是可重入的。

另外和前面不同的现象是每次加1后并没有停止3秒在显示。而是继续显示,只是速度稍慢。因为我们设置间隔为20ms,而执行时间为3s,所以会在20ms后在另一个线程中继续执行,而当前线程被挂起而已。关于计时器的精度,取消3s的挂起,发现结果和第一个基本一致。

三 System.Threading.Timer

继续用这个对象改造程序。

#region System.Windows.Forms.Timer

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int num = 0;

DateTime time1 = new DateTime();

DateTime time2 = new DateTime();

System.Threading.Timer Thread_Time;

private void button1_Click(object sender, EventArgs e)

{

//启动

Thread_Time = new System.Threading.Timer(Thread_Timer_Method,null,0,20);

time1 = DateTime.Now;

}

void Thread_Timer_Method(object o)

{

label1.Text = Convert.ToString((++num));

System.Threading.Thread.Sleep(3000);

}

private void button2_Click(object sender, EventArgs e)

{

//停止

Thread_Time.Dispose();

time2 = DateTime.Now;

MessageBox.Show(Convert.ToString(time2-time1));

}

}

#endregion

用Threading.Timer时的方法,和前面就不太相同了,所以的参数全部在构造函数中进行了设置,而且可以设置启动时间。而且没有提供start和stop方法来控制计时器。而且是以一种回调方法的方式实现,而不是通过事件来实现的。他们之间还是有区别的。

我们只有销毁掉对象来停止他。当你运行时,你会发现他和前面的Timers.Timer一样,是多线程的,主要表现在不会假死,调试运行报错。但跟让你奇怪的是,我们的代码竟然无法让她停止下来。调用了Dispose方法没有用。问题在那?然后有进行了测试,修改了间隔时间为100,200,500,1000,3000,4000。这几种情况。发现当间隔为500ms以上是基本马上就停止了。而间隔时间相对执行时间越短,继续执行的时间越长。这应该是在间隔时间小于执行时间时多个线程运行造成的。因为所有的线程不是同时停止的。间隔越短,线程越多,所以执行次数越多。

最后来看下这个对象另外一个特殊的地方。

static void Main()

{

Timer t = new Timer(Test,null,0,1000);

Console.ReadLine();

}

public static void Test(object o)

{

Console.WriteLine("nihao");

GC.Collect();

}

这段代码会输出什么结果呢?默认情况他只输出一次,就停止了。为什么呢?根据上面说的,当定义对象t,执行代码后,进行了强制垃圾回收,因为t在Main中没有其他引用,所以被回收掉了。但是如果我们吧编译器的”优化“项取消掉,在看看情况。程序进然一直在输出。为什么执行垃圾回收却没有被回收呢?因为这个禁用优化选项,t的声明周期被扩展到了方法结束。所以一直执行。

因为编译器默认是优化的,所以我们必须保证Timer对象一直被引用,而避免被垃圾回收。所以我们可以在编译器打开优化的情况下,在Main函数最后加上t=null保证回收前被引用,但你发现,这样是没用的。因为JIT编译器优化后会吧t=null直接删除,所以我们用t.Dispose(),就可以达到目的。在我们进行垃圾回收时,CLR发现t还有被引用,还没执行Dispose所以不会被回收。是以Threading.Timer有时候会出现运行一次就停止或者是销毁了还在运行的情况,而且和编译器优化也有关,所以使用时要注意。

最后看下MSDN的描述:只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。当不再需要计时器时,请使用 Dispose 方法释放计时器持有的资源。如果希望在计时器被释放时接收到信号,请使用接受 WaitHandle 的 Dispose(WaitHandle) 方法重载。计时器已被释放后,WaitHandle 便终止。

总结:

System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务

器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。

在《CLR Via C#》中讲多线程时有提到这3个计时器,但作者说System.Timers.Timer是对System.Threading.Timer的报装,不推荐使用,但是在我的WEB项目中的Application_Start中我还是使用的这个而不是Threading.Timer,因为使用Threading.Timer时只执行了一次就不在执行了。

对于计时器在B/S结构中的使用就复杂一些,一般我们把计时器放在Application_OnStart中,这样全局维护一个计时器,可以进行定期备份数据库,定期维护用户等操作,而且方法写作静态的,以免被垃圾回收。而不建议在一般的aspx页面中使用,因为服务器端的定时器对用户这样意义不大,完全可以使用JS代替。而且这个页面的每个请求都可能引入一个新的定时器,导致系统崩溃。另外,定时器是https://www.360docs.net/doc/169502995.html,进程,IIS有关,所以对用重要的执行任务,还是建议写成服务或独立程序放在服务器上执行好了。

https://www.360docs.net/doc/169502995.html, AJAX入门系列:Timer控件简单使用

https://www.360docs.net/doc/169502995.html, AJAX入门系列:Timer控件简单使用 本文主要通过一个简单示例,让Web页面在一定的时间间隔内局部刷新,来学习一下https://www.360docs.net/doc/169502995.html, AJAX中的服务端Timer控件的简单使用。 主要内容 Timer控件的简单使用 1.添加新页面并切换到设计视图。 2.如果页面没有包含ScriptManager控件,在工具箱的AJAX Extensions标签下双击ScriptManager控件添加到页面中。 3.单击ScriptManager控件并双击UpdatePanel控件添加到页面中。

4.在UpdatePanel控件内单击并双击Timer控件添加到UpdatePanel中。Timer控件可以作为UpdatePanel的触发器不管是否在UpdatePanel中。 5.设置Interval属性为10000。Interval属性的单位是毫秒,所以我们设置为10000,相当于10秒钟刷新一次。 6.在UpdatePanel控件中添加一个Label控件。

7.设置Label控件的Text属性为“Panel not refreshed yet ”。确保Label控件添加在了UpdatePanel控件里面。 8.在UpdatePanel之外再添加一个Label控件。确保第二个Label控件在UpdatePanel的外面。 9.双击Timer控件添加Tick事件处理,在事件处理中设置Label1的Text属性为当前时间。 protected void Timer1_Tick(object sender, EventArgs e)

{ Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString(); } 10.在Page_Load事件中添加代码设置Label2的Text属性为页面创建时间,如下代码所示: protected void Page_Load(object sender, EventArgs e) { Label2.Text = "Page created at: " + DateTime.Now.ToLongTimeString(); } 11.切换到代码视图,确保代码如下所示: protected void Page_Load(object sender, EventArgs e) { Label2.Text = "Page created at: " + DateTime.Now.ToLongTimeString(); } protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString(); } 12.保存并按Ctrl + F5运行 13.等待10秒钟后可以看到Panel刷新,里面的Label文字改变为刷新的时间而外面的Label没有改变。

计时器控件在VB中的应用

计时器控件在VB中的应用 计时器控件在工具箱中的名称是Timer,该控件是一个非可视控件,即在运行时不可见,用于实现每隔一定时间间隔执行指定的操作。Timer控件对于其他后台处理也是非常有用的。本文用实例来介绍在VB程序中利用计时器控件,实现在程序在启动运行期间各种不同的效果。下面给出编程设计过程,供读者参考选用。 一、计时器(Timer)控件与标签(Label)控件的应用 1、启动VB,新建工程。在工程中添加一个窗体Form1,在窗体上加入一个Timer 计时器控件Timer1和标签控件Label1 2、编写相应的代码,实现不同的功能 (1)字体颜色发生随机变化的效果,计时器事件(Timer)代码如下: l 窗体Form1的加载事件代码 Private Sub Form_Load() Timer1.interval=500 Label1.Caption = “欢迎进入VB应用程序” Label1.font.size=20 Label1.autosize=true End Sub l 计时器(Timer1)控件的Timer事件代码 Private Sub Timer1_Timer() Label1.ForeColor = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd) End Sub (2)依次出现字幕的实现效果,相关事件代码如下: Dim i …在通用-声明中定义变量… Private Sub Timer1_Timer() i = i + 1 Label1.Caption = Left(“欢迎进入VB应用程序”, i) If i > 10 Then i = 0 End If End Sub (3)滚动字幕的实现效果,相关事件代码如下: l 窗体Form1的加载事件代码 Private Sub Form_Load() Label1.Caption = “欢迎进入VB应用程序” End Sub l 计时器(Timer1)控件的Timer事件代码 Private Sub Timer1_Timer() If Label1.Left <= Form1.Width Then Label1.Left = Label1.Left + 100 Else Label1.Left = -Label1.Width End If End Sub (4)制作字体闪烁的效果

英语词典使用指南

英语词典使用指南.txt生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。英语词典使用指南 文/李鼎 在我的十多年的英语学习“生涯”中,光是看过背过的英语词典用了十几本。因为学多了,用多了,在对市面上琳琅满目的词典进行甄别和挑选的时候,也就积累下了一些自己的心得。下面我将针对处于不同英语水平、需要应对不同考试的各类人群,分享一下我的字典选择经验。 一、备考CET-4、CET-6和PETS-3的非英语专业本科生: 对于这一类人群,我的推荐也许有些奇怪,那就是电子词典。因为对于他们来说,根本没有必要使用英英词典。而就英汉词典而言,现在市面上的电子词典,无论是从词汇量还是从准确性而言,都可以和纸质词典相媲美,而且从方便快捷和便于携带的角度而言都更胜一筹。 现在市面上的绝大多数电子词典动辄号称词汇量50万,甚至上百万,虽然是极大的夸张,但保守而言,这些词典10万的词汇量还是可以保证的。这对于词汇量要求在4000~6000左右的四、六级考生而言已经是绰绰有余。而且这些电子词典还包括了很多常用短语和搭配;有的产品甚至引进了诸如American Heritage Dictionary和Cambridge International English Dictionary等国际知名的版权词典,英英解释也非常全面到位,能够满足这一类人群的各种需求。 当然,对于那些不考到90分(新四级610分)不罢休的“骨灰级”考生来说,我会推荐这样一本词典——由张道真教授编纂、外研社出版的《现代英语用法词典》。这本词典涵盖了现代英语中最常用的词语释义、搭配等,配以实用的例句,据内部消息传言,连四、六级命题委员会的成员们在出题的时候都是以这本词典作为参考。所以相信这本词典应该是四、六级考生的终极选择,但由于定价不菲(128元),因此只向“骨灰级”考生推荐。 二、备考TEM-4、8的英语专业本科生,备考考研英语、口译、TOEFL、IELTS的考生: 对于英语专业的学生而言,要进行大量的精读训练和Paraphrase练习;而口译、TOEFL和IELTS 的考生则需要更为精确的英文释义和词频等功能,这时候电子词典就不够用了,推荐大家使用专门为高级英语学习者准备的学习型词典,即ESL(English as a Second Language)词典。在此我想申明一点:以下所提到的英语词典都是英英词典(《English-English Dictionary》),不包括英汉双解、英汉和汉英词典。 英英词典出版领域一直以来都是英国出版公司的天下。其中最著名的是以下5本:Oxford Advanced Learner’s Dictionary(《牛津高阶词典》)、Longman Dictionary of Contemporary English(《朗文当代英语词典》),Cambridge Advanced Learner’s Dictionary(《剑桥高级英语学习词典》)、Collins Cobuild Advanced Learner’s English Dictionary(《柯林斯合作高级英语词典》)、Macmillan English Dictionary(《麦克米伦英语词典》)。这5本词典各擅胜场,而且随着时代的发展,随纸质词典都附送光盘版词典,为我们提供了更多

iFix定时器控件使用心得

iFix定时器控件使用心得 iFix的定时器控件,经常会把初学者搞得头晕脑涨,我说说自己的心得,供大家参考。 该控件是基于调度功能的,所以有一些用法和其它编程平台(如VB)里的定时器不太一样。 一、定时器的启动/停止 如果在编辑时TimerEnabled设为True,则运行时定时器会自动启动。如果在编辑时TimerEnabled设为False,则运行时需要先将TimerEnabled设为True,然后调用StartTimer方法。如果只将TimerEnabled设为True,但是不调用StartTimer 方法,定时器是不会开始工作的。如果要停止定时器,可以调用StopTimer方法,也可以直接将TimerEnabled设为False。也就是说有两种控制定时器启/停的方式: 方式一: 用如下代码启动:Timer1. TimerEnabled=True Timer1. StartTimer 用如下代码停止:Timer1. TimerEnabled=False 方式2: 在画面或调度的Initializes事件中加入:Timer1. TimerEnabled=True 用如下代码启动:Timer1. StartTimer 用如下代码停止:Timer1. StopTimer 二、以“连续”方式使用 以“连续”方式使用时,你会发现这样的现象,例如你希望一个画面被打开10秒钟后自动关闭,你会将定时器的Interval 属性设为10000,事实上却是,画面不到10秒就会被关闭,而且每次的延时时间还不是固定的,似乎是随机的,有时几乎是10秒,有时还不到1秒。这个举例中,定时器仅运行了1次(因为画面已经被关闭了),如果定时器一直运行下去,你还会发现,除了第一次的延时是“随机”的,从第二次开始,延时都是准确的。 这究竟是怎么回事呢?其实这是StartTime属性在起作用,StartTime属性的默认值是0:00:00,表示从午夜0点0分0秒开始,在这种情况下,如果设置为10秒钟的间隔,定时器被触发的时间将是每一分钟的0秒、10秒、20秒……50秒,如果从某一分钟的18秒启动了定时器,那么定时器第一次被触发的时间将会是20秒,也就是说,从启动到第一次触发之间仅有2秒钟的延时,如果你从15秒启动,会得到5秒钟的延时,这就是为什么你会觉得第一次的延时是“随机”的。 好的,既然知道了原因,自然也就有了解决的方法,那就是在每一次调用StartTimer方法之前,将StartTime属性设为当前时间,即Timer1. StartTime = Now就搞定了。例如在8:15:23秒启动,间隔10秒,第一次触发将会是在8:15:33秒的时候。 那是不是所有以“连续”方式使用时,这样作就都OK了呢?不是。这个方法是否有效(也就是得到精确的延时),要看你所希望的延时时间有多长,如果延时是10秒或更长,那没问题,这样是唯一正确且简便的方法。但如果你设置的延时间隔比较小,如3秒以内,甚至是毫秒级的,那么这个方法就会产生比较严重的误差。因为StartTime属性的时间精度只达到秒级,也就是说,实际的运行效果还是会有一定的误差,当然,这个误差最大不会超过1秒,所以一般来说对于5秒以上的延时设置,这个误差可以忽略。但如果延时设置是2秒,然后产生了接近1秒的误差,这就成问题了,误差率将近50%啊!如何解决此类问题呢?有办法,只是稍复杂一点。 例如,我们希望做到这样一个效果——有一个按钮对象(名为cmd1),当用鼠标点击这个按钮时,按钮消失不见,2秒钟之后又出现。也就是说在点击的时候把按钮的Visible属性设为False,并且启动一个定时器控件,2秒之后在定时器的OnTimeOut事件代码中,再把cmd1的Visible属性设为True。 如何比较精确地实现这2秒的时间间隔呢?具体做法是:将定时器的Interval属性设为100毫秒,定义一个模块级变

c_中timer控件的使用

C#中Timer组件用法 Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别 是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的。Timer组件也被封装在名称空间System.Windows.Forms中,其主要作用是当Timer组件启动后,每隔一个固定时间段,触发相同的事件。Timer组件在程序设计中是一个比较常用的组件,虽然属性、事件都很少,但在有些地方使用它会产生意想不到的效果。 其实要使得程序的窗体飘动起来,其实思路是比较简单的。首先是当加载窗体的时候,给窗体设定一个显示的初始位置。然后通过在窗体中定义的二个Timer组件,其中一个叫Timer1,其作用是控制窗体从左往右飘动(当然如果你愿意,你也可以改为从上往下飘动,或者其他的飘动方式。),另外一个Timer2是控制窗体从右往左飘动(同样你也可以改为其他飘动方式)。当然这二个Timer 组件不能同时启动,在本文的程序中,是先设定Timer1组件启动的,当此Timer1启动后,每隔0.01秒,都会在触发的事件中给窗体的左上角的横坐标都加上"1",这时我们看到的结果是窗体从左往右不断移动,当移动到一定的位置后,Timer1停止。Timer2启动,每隔0.01秒,在触发定义的事件中给窗体的左上角的横坐标都减去"1",这时我们看到的结果是窗体从右往左不断移动。当移动到一定位置后,Timer1启动,Timer2停止,如此反覆,这样窗体也就飘动起来了。要实现上述思路,必须解决好以下问题。 (1).如何设定窗体的初始位置: 设定窗体的初始位置,是在事件Form1_Load()中进行的。此事件是当窗体加载的时候触发的。Form有一个DesktopLocation属性,这个属性是设定窗体的左上角的二维位置。在程序中是通过Point结构变量来设定此属性的值,具体如下: //设定窗体起初飘动的位置,位置为屏幕的坐标的(0,240) private void Form1_Load ( object sender , System.EventArgs e ) { Point p = new Point ( 0 , 240 ) ; this.DesktopLocation = p ; } (2). 如何实现窗体从左往右飘动: 设定Timer1的Interval值为"10",就是当Timer1启动后,每隔0.01秒触发的事件是Timer1_Tick(),在这个事件中编写给窗体左上角的横坐标不断加"1"的代码,就可以了,具体如下:

如何利用英汉词典学英语:英汉词典能帮我们学会什么

如今英语学习方面的书籍可谓品种繁多,要想找一本适合各种英语水平的人的辅导书不是一件容易事。不过,我们手边就有这样一种书,不仅适合各种层次的英语学习者,而且准确、实用,这就是英语词典。 说到词典,任何学习英语的人手边至少会有一本,但今天介绍的“巧用词典学英语”,要推荐使用这样几本词典:《牛津高阶英汉双解词典(第六版)》、由上海交通大学出版社出版、吴光华主编的《汉英大词典(第二版)》以及The Merriam-Webster Dictionary of Synonyms and Antonyms(韦氏的同义词、反义词词典)。该如何有效使用这几本词典从而达到英语学习的目的呢?我们除了单词到底还能从中学到什么其他东西吗?下面我就把自己从英语学习以及教学中收获到的一些想法与大家分享一下。 1.利用词典学单词 学习单词,不仅仅是我们为了应试而使用的“背单词”,学单词首先要知道单词的读音、词性、主要中文意思,更深层次的还要去了解单词的用法(包括单复数、分词是否是特殊形式、通常如何用在句子中、是否是旧式用法(即现代英语不常用)、是否是书面语或者口语用法等等)。这里就不得不提到《牛津高阶英汉双解词典(第六版)》(以下简称牛津高阶)了。牛津高阶的优点在于它是一部英汉双解词典,而且具有较高的权威性。学习一个单词,首先我们可以通过牛津高阶给出的音标而掌握这个单词的美式发音或者英式发音;其次可大致了解这个词可做哪些词性用,如:about这个词,就有副词、介词和形容词三种词性,而通过了解词性,就有利于我们掌握这个词在句子中的具体用法;第三,了解在不同的词性下,这个单词的具体的中英文的解释及用法,还是以about为例,当它做副词使用时,通常有“大约”、“凌乱地”、“闲着、无所事事”、“附近”等7种具体的用法,作为介词时也有“关于”、“目的是、为了”、“从事于”等9种用法,而about作为形容词时,一般只出现在习语be about to do sth(即将、将要做某事)和not be about to do sth(不愿做某事)中。这样一来,我们对于about这个小词的掌握才算得上是比较全面了;当然,最后通过词典我们还要对这个词的使用做一个升华,那就是通过词典给出的例句,达到对词的用法的完全掌握,以达到将来举一反三的目的。 在这里,我还想给大家举另外两个例子,是我在教学过程中碰到的。记得在教新概念第二册第一课的时候,碰到一道题目:The writer looked at the man and the woman angrily. He was very . (a) sad (b) unhappy (c) cross (d) pleased。这道题很显然是考察同义转换,有绝大多数学生选择的是(b)选项,他们认为和angrily“生气地”近义词应该只有unhappy“不高兴”了,殊不知cross这个词也可作为形容词用,意思就是“恼怒的”。这就是大家在学单词的时候经常容易忽视的一点:意思学不全。可能这也是一些“应试词汇书”存在的一个很大的缺点:释意不全。 还有一次,在备课过程中,我看到一本自己使用的参考书籍上面写了“最in版”,这引起了我的兴趣,因为在大多数人看来,in作为介词和副词出现的频率最高,而用在此处显然应该是形容词的词性,而且我猜测意思应该近似于latest、popular。翻开牛津高阶888页,看到了in作为形容词的用法:意思是popular and fashionable,证实了我的想法。后来在电视和广播中经常听到这样的介绍:“时下最in的组合”,也就不足为奇了。 类似于这样的例子还有很多,在这里就不赘述了。其实英语中的小词是可以大用的,一个人

使用C#的Timer控件来实现定时触发事件

使用C#的Timer控件来实现定时触发事件 C# Timer用法有哪些呢?我们在使用C# Timer时都会有自己的一些总结,那么这里向你介绍3种方法,希望对你了解和学习C# Timer使用的方法有所帮助。 关于C# Timer类在C#里关于定时器类就有3个 C# Timer使用的方法1.定义在System.Windows.Forms里 C# Timer使用的方法2.定义在System.Threading.Timer类里" C# Timer使用的方法3.定义在System.Timers.Timer类里 下面我们来具体看看这3种C# Timer用法的解释: ◆System.Windows.Forms.Timer 应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer 控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。 ◆System.Timers.Timer 和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。 ◆System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。 C# Timer用法实例 使用System.Timers.Timer类 System.Timers.Timer t = new System.Timers.Timer(10000); //实例化Timer类,设置间隔时间为10000毫秒; t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件; t.AutoReset = true; //设置是执行一次(false)还是一直执行(true); t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件; public void theout( object source, System.Timers.ElapsedEventArgs e) { MessageBox.Show("OK!"); } C# Timer用法的基本情况就向你介绍到这里,希望对你了解和学习C# Timer使用有所帮助。详细参考:https://www.360docs.net/doc/169502995.html,/zh-cn/library/vstudio/system.timers.timer.aspx

vb6.0时间控件timer详解

vb6.0时间控件timer详解 通过引发Timer 事件,Timer 控件可以有规律地隔一段时间执行一次代码。 语法 Timer 说明 Timer 控件用于背景进程中,它是不可见的 ************************以下是他的属性**************** Enabled 属性 返回或设置一个值,该值用来确定一个窗体或控件是否能够对用户产生的事件作出反应。 语法 object.Enabled [= boolean] Enabled 属性的语法包含下面部分: 部分描述 object 对象表达式,其值是“应用于”列表中的一个对象。如果object 被省略,则与活动窗体模块相联系的窗体被认为是object。 boolean 一个用来指定object 是否能够对用户产生的事件作出反应的布尔表达式。 设置 boolean 的设置为: 设置描述 True (缺省)允许object 对事件作出反应。 False 阻止object 对事件作出反应。 Enabled 属性示例 该例子使一个CommandButton 控件有效而不管TextBox 控件是否包含文本。要试用此例,先将下面的代码粘贴到带有CommandButton 和TextBox 控件的一个窗体的声明部分,然后按下F5 键并在文本框中随意输入一些内容。 Private Sub Form_Load () Text1.Text = "" ' 清除文本框的内容。

Command1.Caption = "Save" ' 在按钮上放置标题。 End Sub Private Sub Text1_Change () If Text1.Text = "" Then '查看文本框是否为空。 Command1.Enabled = False '使按钮无效。 Else Command1.Enabled = True '使按钮有效。 End If End Sub Interval 属性 返回或设置对Timer 控件的计时事件各调用间的毫秒数。 语法 object.Interval [= milliseconds] Interval 属性语法有以下组成部分: 部分描述 object 对象表达式,其值是“应用于”列表中的一个对象。 milliseconds 数值表达式,指定毫秒数,“设置值”中有详细说明,。 设置值 milliseconds 的设置值为: 设置值描述 0 (缺省值)使Timer 控件无效。 1 to 65,535 设置的时间间隔(以毫秒计),在Timer 控件Enabled 属性设置为True 时开始有效,例如,10,000 毫秒等于10 秒。最大值为65,535 毫秒,等于1 分钟多一些。 说明 可以在设计时或在运行时设置Timer 控件的Interval 属性。使用Interval 属性时,请记住: Timer 控件的Enabled 属性决定该控件是否对时间的推移做响应。将Enabled 设置为False 会关闭Timer 控件,设置为True 则打开它。当Timer 控件置为有效时,倒计时总是从其Interval 属性的设置值开始。 创建Timer 事件程序用以告诉Visual Basic 在每次Interval 到时该做什么。 Interval 属性示例

如何正确使用英文字典

1、问:什么是英汉双解词典?使用双解词典有何好处?如何使用英汉双解词典?英语达到 什么水平可以用双解词典? 答:英汉双解词典是在保留英语原版词典内容的基础上,为原版词典中的词条、例句和注释等提供对应的汉语翻译的词典。简单地说,它是在英语原版词典的基础上加上汉语释义的词典。比如《牛津英汉双解小词典》、《牛津袖珍英汉双解词典》以及《牛津现代英汉双解词典》等都属于这类词典。 由于英语和汉语并不是完全对应的,因此,使用英汉双解词典,读者既能了解某单词在汉语中的对应词,又能通过其英语释义更清楚、更准确地理解其含义,避免因单纯看汉语对应词而产生的词义扩大或缩小等带来的理解偏差。另外,使用英汉双解词典可以增加英语语感,同时学习到比较地道规范的英语用法和说法。在下面的两个例子中可以比较清楚地体现出来:⑴ cleaver noun butcher's heavy chopping tool (肉铺的)切肉刀。在这个例子中,汉语的翻译"切肉刀"只表达了工具的用途,但它的形态没有表达出来,如heavy表明这把刀是厚重的, chopping也说明这把刀是用来切大块肉的。由于英汉两种语言的不同,以及词典的容量有限,必然会导致一些有用信息的流失,所以保留英语是相当必要的。⑵ cupboard noun recess or piece of furniture with door and usually shelves 壁橱,碗橱, 橱柜。在这个例子中,汉语释义的作用是不言而喻的,英文部分的解释不能马上让读者产生理解和印象,而汉语的释义则立刻解决了这个问题。在查阅英汉双解词典时,不能只是满足于知道了一个英文单词的中文对应词,还要注意读它的英文释义,以便进一步领会其准确含义。一般来说,初中水平以上的英语学习者就可以使用英汉双解词典了。一开始,最好选用难度较低的这类词典,如《牛津英汉双解小词典》。而对于中、高级英语学习者来说《朗文当代高级英语辞典》(英英?英汉双解)、《麦克米伦高阶英汉双解词典》都是不错的选择。 2、问:什么叫英语学习词典? 答:英语学习词典是专为母语不是英语的学习者编纂的英语词典,其特点是: ⑴ 选词适当,根据语料库数据分析词频后选用英语学习者最需要的常用词汇。 ⑵ 释义简明,释义词汇控制在一定数量之内(如2000-3500个常用词汇),使学习者使用起来非常方便,因此很受英语学习者的欢迎。

实用高中英语惯用法词典

《实用高中英语惯用法词典》 A ◆a / an art. 英语不定冠词(a/an)的用法较复杂,以下几点须注意: 1.用a还是an:一般说来,辅音或半元音[j, w]开头的词要前用a。如: He has a computer (watch). 他有一台电脑(一块手表)。 He’s a university student (European). 他是大学生(欧洲人)。 元音开头的词前要用an。如: This is an egg (honest boy). 这是一只鸡蛋(诚实的男孩)。 注意,有的字母(如a, e, f, h, i等)或缩略词,若第一个音是元音也应用an。如: He missed an “n” in the word. 他写的这个单词漏了一个n。 2.不要从汉语习惯出发,漏掉必用的a/an。如: 他父亲是著名诗人。 误:His father is famous poet. 正:His father is a famous poet. 3.用于转化为普通名词的专有名词前,表示某某人或某某人的一部作品、艺术品等。如: A Mr Smith wants to see you. 一位叫史密斯先生的人想见你。 He bought a complete Lu Hsun.他买了一套鲁迅全集。 4.用于转化为普通名词的物质名词前,表示相应的产品或种类,有时表示数量关系。如: It’s a good wine. 这是(一种)好酒。 Two coffees and a tea, please. 请来两杯咖啡和一杯茶。 5.用于具体化的抽象名词前,表示与该抽象名词意义相关的人或事等。如: The party was a great success. 晚会开得非常成功。 It’s a pleasure to talk with you. 同你谈话是件愉快的事。 6.用于某些由动词转化来或具有动作意味的名词前,表示一次、一番等意义。如: Let me have a look. 让我看看吧。 I’ll give the car a good wash. 我要把车好好洗一洗。 7.用于序数词前表示数量或序数的增加。如: He bought a second computer. 他又买了一台(即第二台)电脑。 Later she borne a third son.后来她又生了第三个儿子。 8.有的不可数名词或本来应该带定冠词(the)的名词,由于受定语(尤其是形容词)的修饰,其前一般要用不定冠词或改用不定冠词,表示某种状态,此时的不定冠词通常含有 a kind of 的意思。如: have breakfast 吃早餐→have a quick breakfast 吃快餐 the world 世界→a world like ours 像我们这样的世界 注:有些不可数名词即使受形容词的修饰也不能用不定冠词,容易弄错的有:news(消息),advice(忠告),luck(运气),fortune(运气),work(工作),fun(娱乐,有趣的事),weather(天

关于使用C#通过Timer控件实现自动播放图片的效果问题

关于使用C#通过Timer控件实现自动播放图片的效果问题 F1ake 4级被浏览52次 2013.04.23 using System; using System.Collections.Generic; using https://www.360docs.net/doc/169502995.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 第五章_work { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int i = 0; private void picRight_Click(object sender, EventArgs e) { i--; if (i > -1) { picPicture.Image = ilImgList.Images[i]; } else { MessageBox.Show("已经是最后一张了","提示",MessageBoxButtons.OK,MessageBoxIcon.Excl amation); } } private void picLeft_Click(object sender, EventArgs e) { i++; if (i < 9)

{ picPicture.Image = ilImgList.Images[i]; } else { MessageBox.Show("已经是最后一张了", "提示", MessageBoxButtons.OK, MessageBoxIcon. Exclamation); } } private void Form1_Load(object sender, EventArgs e) { picPicture.Image = ilImgList.Images[0]; } private void picLook_Click(object sender, EventArgs e) { timer1.Enabled != timer1.Enabled; if (timer1.Enabled==true) { timer1.Start(); } else { timer1.Stop(); } } private void timer1_Tick(object sender, EventArgs e) { //if (count < ilImgList.Images.Count - 1) //{ // count++; //} //else //{

如何正确选择和使用英语词典

如何正确选择和使用英语词典 “孩子刚上初中,我应该给他买什么样的英语词 典”“我准备高考/四六级考试,应该买什么样的英语词典”“我想提高写作能力,应该买什么样的词典”…… 以上问题您也很想知道吧。小编搜集到一篇文章,特整理过来,希望对大家有所帮助。 1.什么是英汉双解词典 2.什么叫英语学习词典 3.什么是英语阅读型词典 4.什么是英英词典 5.什么是汉英词典 6.什么是图解词典 7.一本词典的收词量通常指的是什么 8.词典的收词量是否越多越好 9.市场上的“初阶”“中阶”“高阶”词典有什么不同 10.词典应该及时更新换代吗 11.买一本厚的词典是否一步到位好,还是在不同的阶段买不同的词典好 12.我认为学生买一部比较大的词典就够用了,为什么要分级购买呢 13.初学者应该选用何种词典 14.当代大学生应该用什么样的英语词典

15.牛津的词典和朗文的词典哪一个好两者的主要区别在 哪里 16.为什么有的词典还配有CD-ROM 17.选择英语词典要考虑的因素有哪些 18.如果想要在语法上取得进步,应选用什么词典 19.要提高写作能力,应选用什么词典 20.准备四六级考试用什么词典好呢 21.电子词典和纸质词典哪个好 22.为了准备高考,选用什么样的词典比较合适呢 24.英语词典的附录有什么用 25.有些词典的音标与教材上所注不同是什么原因 26.英语词典哪些品牌最为著名 27.美式英语词典与英式英语词典的异同点有哪些 1 什 么是英汉双解词典使用双解词典有何好处如何使用英汉双 解词典英语达到什么水平可以用双解词典 英汉双解词典是在保留英语原版词典内容的基础上,为原版词典中的词条、例句和注释等提供对应的汉语翻译的词典。简单地说,它是在英语原版词典的基础上加上汉语释义的词典。比如《牛津英汉双解小词典》、《牛津袖珍英汉双解词典》以及《牛津现代英汉双解词典》等都属于这类词典。由于英语和汉语并不是完全对应的,因此,使用英汉双解词典,读者既能了解某单词在汉语中的对应词,又能通过其英语释

会计英汉词典--非常实用

会计英汉词典--非常实用

1 AAA 美国会计学会 2 Abacus 《算盘》杂志 3 abacus 算盘 4 Abandonment 废弃,报废;委付 5 abandonment value 废弃价值 6 abatement ①减免②冲销 7 ability to service debt 偿债能力 8 abnormal cost 异常成本 9 abnormal spoilage 异常损耗 10 a bove par 超过票面价值 11 above the line 线上项目 12 a bsolute amount 绝对数,绝对金额 13 a bsolute endorsement 绝对背书 14 a bsolute insolvency 绝对无力偿付 15 a bsolute priority 绝对优先求偿权 16 a bsolute value 绝对值 17 a bsorb 摊配,转并 18 a bsorption account 摊配账户,转并账户 19 a bsorption costing 摊配成本计算法 20 a bstract 摘要表 21 a buse 滥用职权 22 a buse of tax shelter 滥用避税项目

23 A CCA 特许公认会计师公会 24 a ccelerated cost recovery system 加速成本收回制度 25 a ccelerated depreciation method 加速折旧法,快速折旧法 26 a cceleration clause 加速偿付条款,提前偿付条款 27 a cceptance ①承兑②已承兑票据③验收 28 a cceptance bill 承兑票据 29 a cceptance register 承兑票据登记簿 30 a cceptance sampling 验收抽样 31 a ccess time 存取时间 32 a ccommodation 融通 33 a ccommodation bill 融通票据 34 a ccommodation endorsement 融通背书 35 a ccount ①账户,会计科目②账簿,报表③账目,账项④记账 36 a ccountability 经营责任,会计责任 37 a ccountability unit 责任单位 38 A ccountancy 《会计》杂志 39 a ccountancy 会计 40 a ccountant 会计员,会计师

时钟控件

这一讲我们学习时钟控件的应用,应用程序运行如下左图所示,程序代码见下右图。 建立一个新的工程文件shili04.vbp。在窗体上放置一个文字标签Label1,设置Caption属性为“小雨点工作室VB初学者教程”;放置三个命令按钮Command1-3,Caption属性依次为“移动”、“停止”和“退出”。在工具箱 中找到时钟控件“”图标双击,在窗体上放置一个时钟控件Timer1。 时钟控件的主要属性只有两个:Enabled和Interval。 当Enabled设置为True时,应用程序会每间隔一定的时间触发一次Timer事件,就是执行一次 Private Sub Timer1_Timer() End Sub 之间的程序代码。而当Enabled设置为False时这一事件中止执行。 Interval属性决定了Timer事件循环执行的周期,单位为毫秒(1/1000秒)。 我们这个示例设置Enabled初始属性为False,Interval属性为50,程序运行时分析如下: 当单击Command1按钮时触发Command1的Click事件,程序执行 Private Sub Command1_Click() End Sub 之间的代码Timer1.Enabled = True,使时钟控件启动运行——字幕滚动开始。 当单击Command2按钮时触发Command2的Click事件,程序执行 Private Sub Command2_Click() End Sub 之间的代码Timer1.Enabled =False,使时钟控件中止运行——字幕滚动停止。 本事例我们使用了Timer控件的一个唯一事件Timer事件,当Timer的Enabled=True时,每间隔50毫秒时间程序会执行一次 Private Sub Timer1_Timer() End Sub 之间的代码 If Label1.Left < -2700 Then Label1.Left = 3150 Label1.Left = Label1.Left - 90 第一句代码的意思是:当标签Label1的左边距Left小于-2700时就让左边距值重新初始其值为3150。第二句代码的意思是:让标签Label1的左边距Left值在原有基础上减少90个单位。整个时钟控件的程序代码意思是:如果Time1的Enabled=True,那么每隔50毫秒时间间隔标签Label1的位置向左移动90个单位,但当标签L abel1移出窗体时让它的左边距重新初始位置。 大家可以试着改变Timer1的Interval的值,观察字幕滚动的快慢。

英语基础词汇惯用法词典

英语基础词汇惯用法词典 A ◆a / an art. 英语不定冠词(a/an)的用法较复杂,以下几点须注意: 1.用a还是an:一般说来,辅音或半元音[j, w]开头的词要前用a。如: He has a computer (watch). 他有一台电脑(一块手表)。 He’s a university student (European). 他是大学生(欧洲人)。 元音开头的词前要用an。如: This is an egg (honest boy). 这是一只鸡蛋(诚实的男孩)。 注意,有的字母(如a, e, f, h, i等)或缩略词,若第一个音是元音也应用an。如:He missed an “n” in the word. 他写的这个单词漏了一个n。 2.不要从汉语习惯出发,漏掉必用的a/an。如: 他父亲是著名诗人。 误:His father is famous poet. 正:His father is a famous poet. 3.用于转化为普通名词的专有名词前,表示某某人或某某人的一部作品、艺术品等。如: A Mr Smith wants to see you. 一位叫史密斯先生的人想见你。 He bought a complete Lu Hsun.他买了一套鲁迅全集。 4.用于转化为普通名词的物质名词前,表示相应的产品或种类,有时表示数量关系。如: It’s a good wine. 这是(一种)好酒。 Two coffees and a tea, please. 请来两杯咖啡和一杯茶。 5.用于具体化的抽象名词前,表示与该抽象名词意义相关的人或事等。如: The party was a great success. 晚会开得非常成功。 It’s a pleasure to talk with you. 同你谈话是件愉快的事。 6.用于某些由动词转化来或具有动作意味的名词前,表示一次、一番等意义。如: Let me have a look. 让我看看吧。 I’ll give the car a good wash. 我要把车好好洗一洗。 7.用于序数词前表示数量或序数的增加。如: He bought a second computer. 他又买了一台(即第二台)电脑。

浅谈英语词典的使用与英语学习-模板

浅谈英语词典的使用与英语学习 摘要:词典是英语学习过程中不可缺少的工具。学会正确使用词典能使学习者事半功倍,既学到有关语言的知识,又能提高学习能力。目前由于多数大学生对词典的认识不够,使用词典的频率不高,而且在使用过程中存在着许多问题。针对以上的问题,及如何正确使用词典,笔者提出了自己的看法和建议,希望能提高大学生的自主学习能力和学习效率。 一、引言 曾历时七年,独立完成睥睨英国文坛的《英语词典》(A Dictionary of the English Language)的18 世纪大文豪塞缪尔.约翰逊博士曾经说过:“知识分两种:一种是我们自身驾轻就熟的知识,另一种则是我们知道往何处查询的知识。”如此说来,这里指的第二种知识就是供人们参考查证的词典了。 学英语就得查词典。初学阶段也许一本简单的英汉词典就够了,但是随着学习的进展,单单一本词典往往解决不了学习中遇到的种种问题。这时,了解不同的词典的特点,知道什么样的问题查什么词典和怎样去查就变得十分重要。(张载梁) 而目前多数大学生在这方面存在问题和误区,既不了解词典的特点,也不重视英语词典的使用。因此,了解词典在英语学习中的重要作用及如何正确使用词典是本文所要探讨的课题。 二、英语词典在外语学习中的重要作用 北京外国语大学的张载梁教授就说过“多一本词典,多一位老师”,来说明词典对英语学习的重要性。可见,词典在外语学习过程中发挥着重要作用。首先,它能帮助我们确切理解词义,通过查词典,可以知道某个单词的正确读音,词性,搭配和多种解释,以及在句子中的用法等,同时也有利于学生自主的词汇学习。其次,能丰富知识,锻炼思维,词典是人类知识的宝库,词典中的定义一般都非常严谨,周密,具有高度的科学性和逻辑性。因此,能满足词汇学习的精确性要求。同时,阅读和领会这些定义,并且形成概念,这实际上是我们在用大脑进行复杂的思维活动,所以经常使用词典无疑会增长我们的知识和提高我们的思维能力。最后,能帮助我们学会构词造句。有很多大学生写的作文大部分都是简单句,很少使用复合句,即使用复合句也是错误百出。而通过查阅词典,可以看到每个单词下面都会配有很多的例句,学生可以理解和掌握这些句型,提高遣词造句的

相关文档
最新文档