winform 利用线程 实现窗体图片轮播
2017-06-02 08:31
399 查看
之前做一个餐饮点餐系统,需要在主界面实现自定义的一些图片的轮播,起初使用定时器,但是当子窗体打开,主线程转移,图片轮播就停止了。
随之使用线程来实现,当时查阅不少博客,与之契合的较少。所以贴上自己的代码,供后来者多一份参考~
线程的使用需要注意: 1、开始时确认线程的调用状态。 2、程序结束、或功能完成后,判断线程状态,并关闭。
using System.Windows.Forms;
using OrderFoodSystem.BLL;
using System.Threading;
namespace OrderFoodSystem
{
public partial class FrmMain : Form
{
public FrmMain()
{
Form.CheckForIllegalCrossThreadCalls = false; // 线程调用状态
InitializeComponent();
}
Thread t;
private void FrmMain_Load(object sender, EventArgs e) //FormLoad
{
t = new Thread(new ThreadStart(Runiamge)); //启动线程
t.Start();
foodInfoBLL fib = new foodInfoBLL();
List<Model.foodInfo> foodlist = fib.outfoodlist(1);
foreach (Control control in this.Controls)//遍历Form上的所有控件
{
if (control is PictureBox)
{
PictureBox pb = (PictureBox)control;
pb.AllowDrop = true;
}
}
#region 推荐菜品图片轮播的实现
public List<string> foodPhoto = new List<string>(); //声明一个list集合用来存放 需要轮播的图片路径
private void btnFoodRecom_Click(object sender, EventArgs e) //添加推荐图片
{
//t = new Thread(new ThreadStart(Runiamge));
//t.Start();
foodInfoBLL fib = new foodInfoBLL();
List<Model.foodInfo> foodlist = fib.outfoodlist(1);
for (int i = 0; i < foodlist.Count; i++)
{
foodPhoto.Add(foodlist[i].FoodPhoto);
}
foreach (Control picbox in panel1.Controls)
{
if (picbox is PictureBox)
{
PictureBox pic = (PictureBox)picbox;
pic.SizeMode = PictureBoxSizeMode.StretchImage;
}
}
}
private void Runiamge() //图片轮播
{
while (true)
{
for (int i = 0; i < foodPhoto.Count - 3; i++)
{
//if (foodPhoto.Count == i - 3)
//{
// i = 0;
//}
pictureBox1.Image = Image.FromFile(foodPhoto[i].ToString());
pictureBox2.Image = Image.FromFile(foodPhoto[i + 1]);
pictureBox3.Image = Image.FromFile(foodPhoto[i + 2]);
Thread.Sleep(1500);
pictureBox1.Image = null;
}
}
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) //窗体关闭时结束线程
{
if (t.ThreadState == ThreadState.Running) //判断线程是否处于运行状态
{
t.Abort();
}
}
#endregion
随之使用线程来实现,当时查阅不少博客,与之契合的较少。所以贴上自己的代码,供后来者多一份参考~
线程的使用需要注意: 1、开始时确认线程的调用状态。 2、程序结束、或功能完成后,判断线程状态,并关闭。
using System.Windows.Forms;
using OrderFoodSystem.BLL;
using System.Threading;
namespace OrderFoodSystem
{
public partial class FrmMain : Form
{
public FrmMain()
{
Form.CheckForIllegalCrossThreadCalls = false; // 线程调用状态
InitializeComponent();
}
Thread t;
private void FrmMain_Load(object sender, EventArgs e) //FormLoad
{
t = new Thread(new ThreadStart(Runiamge)); //启动线程
t.Start();
foodInfoBLL fib = new foodInfoBLL();
List<Model.foodInfo> foodlist = fib.outfoodlist(1);
foreach (Control control in this.Controls)//遍历Form上的所有控件
{
if (control is PictureBox)
{
PictureBox pb = (PictureBox)control;
pb.AllowDrop = true;
}
}
#region 推荐菜品图片轮播的实现
public List<string> foodPhoto = new List<string>(); //声明一个list集合用来存放 需要轮播的图片路径
private void btnFoodRecom_Click(object sender, EventArgs e) //添加推荐图片
{
//t = new Thread(new ThreadStart(Runiamge));
//t.Start();
foodInfoBLL fib = new foodInfoBLL();
List<Model.foodInfo> foodlist = fib.outfoodlist(1);
for (int i = 0; i < foodlist.Count; i++)
{
foodPhoto.Add(foodlist[i].FoodPhoto);
}
foreach (Control picbox in panel1.Controls)
{
if (picbox is PictureBox)
{
PictureBox pic = (PictureBox)picbox;
pic.SizeMode = PictureBoxSizeMode.StretchImage;
}
}
}
private void Runiamge() //图片轮播
{
while (true)
{
for (int i = 0; i < foodPhoto.Count - 3; i++)
{
//if (foodPhoto.Count == i - 3)
//{
// i = 0;
//}
pictureBox1.Image = Image.FromFile(foodPhoto[i].ToString());
pictureBox2.Image = Image.FromFile(foodPhoto[i + 1]);
pictureBox3.Image = Image.FromFile(foodPhoto[i + 2]);
Thread.Sleep(1500);
pictureBox1.Image = null;
}
}
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) //窗体关闭时结束线程
{
if (t.ThreadState == ThreadState.Running) //判断线程是否处于运行状态
{
t.Abort();
}
}
#endregion
相关文章推荐
- 利用反射,实现动态调用winform窗体!!
- winform利用委托实现窗体间传值
- Android中利用Handler实现图片轮播 ,示例+ 代码
- Angular2利用组件与指令实现图片轮播组件
- Winform利用委托实现子窗体传值给父窗体
- 利用反射,实现动态调用winform窗体(转)
- C#winform 实现图片轮播
- 利用CSS3实现图片无间断轮播图的实现思路
- Android之利用Viewpager实现图片的轮播效果
- winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题
- winform中利用Treeview模仿资源管理器实现图片文件列表
- winform利用itextsharp.dll实现图片文件转换PDF格式文件
- Winform中利用委托实现窗体之间的传值
- 每日一题_JavaScript.利用纯JavaScript Dom Core实现图片轮播效果?
- [转]winForm:利用窗体的自定义属性实现窗体传值
- 利用jquery实现图片轮播效果(可配置每张图片的停留时间)
- 利用Java线程Thread实现接口Runnable接口使图片动起来
- 利用UIScrollView实现一个简单的图片轮播
- winform程序两个窗体间同步数据(一): 静态变量和线程实现
- jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承