日期:2014-05-17  浏览次数:20897 次

怎么完成让3个picturebox控件里的图片每隔一定时间 相互交换的功能啊,要用thread写。大神们,救救我这菜鸟
怎么完成让3个picturebox控件里的图片每隔一定时间 相互交换的功能啊,要用thread写。大神们,救救我这菜鸟

------解决方案--------------------
只要交换,用毛Thread.
一个Timer就可以。
------解决方案--------------------
google thread.timer 用法。
------解决方案--------------------
一个Timer就可以。
------解决方案--------------------
一个Timer就可以。 
------解决方案--------------------
引用:
我用timer做了,老大要求不用timer,要求用thread做


你们老大.....,虽然我不懂,但是所有的Timer运行时应该本身就是在一个线程中的.

每隔一定时间表明是定时的,不用Timer难道循环读计时器间隔啊...
------解决方案--------------------
多定义几个线程,线程调用时候挂起其他线程,不知道可行不。定时可以通过sleep来实现。
------解决方案--------------------
引用:
我用timer做了,老大要求不用timer,要求用thread做

timer和thread不矛盾。
要不怎么有system.threading.timer
或许你用的是system.windows.forms.timer,注意用前者。
------解决方案--------------------
.net类库提供了三种计时器,详见MSDN的说明(http://msdn.microsoft.com/zh-cn/library/tb9yt5e6(v=vs.80).aspx)。对于你的应用场景,我认为选择Windows计时器是最合适,你们老大一定要用线程计时器,他不是在考你就是在显摆。
线程计时器与Windows计时器除了在用法上不同以外,最关键的就是跨线程操作界面上的控件。从.net 2.0开始,在默认情况下不允许直接跨线程操作控件,当有这种需要时,可通过Control.InvokeRequired属性以及Control.Invoke或BeginInvoke方法进行安全的跨线程操作控件。
下面一段示例,假定已经引用了System.Threading命名空间。


// 交替图片
private void SwapPictures()
{
  Image img = pictureBox1.Image;
  pictureBox1.Image = pictureBox2.Image;
  pictureBox2.Image = pictureBox3.Image;
  pictureBox3.Image = LoadNextImage();
  if (img != null) img.Dispose();
}

// 启动一个延时为5秒的单次定时器。
private void InitTimer()
{
  new Timer((state) =>
  {
    this.Invoke(new Action(SwapPictures));
  }, null, 5000, Timeout.Infinite);
}