改进版---照片自动展示程序的 c#
改进版---照片自动展示程序的 c#
摘要: 用Timer 代换了sleep(),这样的好处是可以在显示时实时拖动窗体。
看到了网友bravf对我的”照片显示”代码的评论,他建议我不要用进程的sleep来控制时间,因为那样会使程序在sleep时 不能拖动窗体。对此我以前没有考虑,只是找到了一个sleep就拿来用了。
今天听从了他的意见,进行了测试。测试时将时间延长,将sleep(500)改成了sleep(5000)果然如他所说,在程序在sleep 的时候,是不能拖动的。
不过他也给了个解决方案用定时器。
按图索骥,我找到了Timer 组件。
说到Timer组件,在MSDN帮助上有两个:
System.Windows.Forms .Timer 类
提供有关 Timer 类(用于
Windows 窗体计时器)及其成员的参考信息。
System.Timers .Timer 类
提供有关 System.Timers .Timer 类(用于基于服务器的计时器)的参考信息。
因为是做windows窗体,选用System.Windows.Forms .Timer 类 ,对于这个类MSDN上的备注是:
Timer 用于以用户定义的事件间隔触发事件。Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。
使用此计时器时,请使用 Tick
事件执行轮询操作,或在指定的时间内显示启动画面。每当 Enabled
属性设置为 true 且 Interval
属性大于 0 时,将引发 Tick
事件,引发的时间间隔基于 Interval
属性设置。
此类提供用于设置时间间隔以及启动和停止计时器的方法。
注意: |
Windows 窗体 Timer 组件是单线程组件,精度限定为 55 毫秒。如果您需要更高精度的多线程计时器,请使用 System.Timers 命名空间中的 Timer
类。 |
后面还有一个关于使用的例子,照着例子我将自己的代码改了。
首先定义了一个操作
private void TimerEventProcessor(Object
myObject,EventArgs myEventArgs)
{
pictureBox1.SizeMode =
PictureBoxSizeMode.StretchImage;
pictureBox1.ClientSize = new Size(200, 200);
string str;
str = Str;
pictureBox1.Load(str);
judgeshow = false;
}
这个操作是为了后面的时间驱动用的。
再就是在原来的循环体内改成了
judgeshow = true;
Str
= str[i];
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Interval = 5000;
myTimer.Start();
//this.load += new loadPic(this.loadpicture);
// 循环播放的精髓
while (judgeshow == true)
{
Application.DoEvents();
}
其中有些还是不是很了解,关于 tick事件,他用的是EventHandler委托,这个委托定义是:public delegate void EventHandler(
Object
sender,
)。
不过很不幸的是,对于imagelist的用法还是不了解,未能在这点上进行改进。
源码下载改进版代码