using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Vlc.DotNet.Forms; namespace CameraErrorCheck { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// /// 线程Task /// Task t = null; /// /// 线程内循环是否继续 /// bool bolWhere = true; /// /// 是否播放下一条视频 /// bool bolIsNexCamera = false; /// /// 窗体初始化 /// /// /// private void Form1_Load(object sender, EventArgs e) { t = new Task(() => { while (bolWhere) { if (bolIsNexCamera) { if (listIndex >= listCamera.Count - 1) { listIndex = 0; AddMsg(System.Environment.NewLine); AddMsg("一轮播放结束,延迟一段时间后,再次循环"); AddMsg(System.Environment.NewLine); AddMsg(System.Environment.NewLine); MyFileLogHelper.WriteFire(new LogInfoMo() { message = System.Environment.NewLine, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = System.Environment.NewLine, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "***************************************", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "一轮播放结束,延迟一段时间后,再次循环", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); Thread.Sleep(1000 * 60 * 60 * 2); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "延迟结束,再次循环", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "一轮播放结束,延迟一段时间后,再次循环", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = System.Environment.NewLine, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); MyFileLogHelper.WriteFire(new LogInfoMo() { message = System.Environment.NewLine, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); // Thread.Sleep(1000 * 60 * 2); AddMsg(System.Environment.NewLine); AddMsg("一轮播放结束,延迟一段时间后,再次循环"); AddMsg(System.Environment.NewLine); AddMsg(System.Environment.NewLine); } AddMsg("控制播放"); bolIsNexCamera = false; //调用播放方法 PalyNexCamera(); } //Thread.Sleep(5000); //模拟工作过程 } }); t.Start(); t.ContinueWith(task => { AddMsg("任务完成,完成时候的状态为:"); AddMsg(string.Format("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}", task.IsCanceled, task.IsCompleted, task.IsFaulted)); }); } /// /// 摄像头数据缓存 /// List listCamera = new List(); /// /// 遍历索引 /// int listIndex = 0; /// /// 初始化按钮点击 /// /// /// private void button1_Click(object sender, EventArgs e) { try { //摄像头查询SQL string sqlStr = @"SELECT * from tbl_camera WHERE ORG_ID in (SELECT org_id from fire_org,(select get_Org_child_list('D8DC637B8B984848A63F82A018AFAEB0') cids ) s WHERE find_in_set(org_id,cids) ) and PLAYURL like 'http%' "; //查询数据 var dt = CameraMySqlHelp.QueryTable(sqlStr); //清空缓存集合 listCamera.Clear(); AddMsg("查询数据:" + dt.Rows.Count + "条"); for (int i = 0; i < dt.Rows.Count; i++) { try { listCamera.Add(new CameraInfoMo() { C_NAME = dt.Rows[i]["C_NAME"] + "", C_NO = dt.Rows[i]["C_NO"] + "", ID = dt.Rows[i]["ID"] + "", ORG_ID = dt.Rows[i]["ORG_ID"] + "", ORG_NAME = dt.Rows[i]["ORG_NAME"] + "", PLAYURL = dt.Rows[i]["PLAYURL"] + "", }); } catch (Exception ex) { AddMsg("摄像头数据加载缓存异常:索引" + i + ",异常信息:" + ex); } } listIndex = 0; AddMsg("摄像头数据加入缓存完毕"); //允许开始按钮点击 button2.Enabled = true; //初始化禁用按钮点击 button1.Enabled = false; } catch (Exception ex) { AddMsg("初始化数据异常:" + ex); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "初始化数据异常:" + ex, msgType = EnumLogMsgTypeEnum.Error, path = "Error" }); } } /// /// 开始监控 /// /// /// private void button2_Click(object sender, EventArgs e) { bolIsNexCamera = true; button2.Enabled = false; button3.Enabled = true; } /// /// 停止监控 /// /// /// private void button3_Click(object sender, EventArgs e) { bolIsNexCamera = false; button2.Enabled = true; button1.Enabled = true; } /// /// 控制播放 /// private void PalyNexCamera() { try { if (listCamera.Count > listIndex) { AddMsg("播放视频:" + listCamera[listIndex].PLAYURL); vlcControl1.Play(new Uri(listCamera[listIndex].PLAYURL)); vlcControl1.Tag = listCamera[listIndex].ID; listIndex++; } } catch (Exception ex) { AddMsg("播放视频异常:" + ex); } } /// /// 视频播放 /// /// /// private void vlcControl1_Playing(object sender, Vlc.DotNet.Core.VlcMediaPlayerPlayingEventArgs e) { var vlcObj = (VlcControl)sender; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "视频播放正常,信息ID:" + vlcObj.Tag, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); UpdCampStart(vlcObj.Tag + "", "0"); } /// /// 播放错误 /// /// /// private void vlcControl1_EncounteredError(object sender, Vlc.DotNet.Core.VlcMediaPlayerEncounteredErrorEventArgs e) { var vlcObj = (VlcControl)sender; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "视频播放错误,信息ID:" + vlcObj.Tag, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); UpdCampStart(vlcObj.Tag + "", "1"); } /// /// 播放结束 /// /// /// private void vlcControl1_EndReached(object sender, Vlc.DotNet.Core.VlcMediaPlayerEndReachedEventArgs e) { var vlcObj = (VlcControl)sender; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "视频播放结束,信息ID:" + vlcObj.Tag, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); UpdCampStart(vlcObj.Tag + "", "1"); } /// /// 播放停止 /// /// /// private void vlcControl1_Stopped(object sender, Vlc.DotNet.Core.VlcMediaPlayerStoppedEventArgs e) { var vlcObj = (VlcControl)sender; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "视频播放停止,信息ID:" + vlcObj.Tag, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); UpdCampStart(vlcObj.Tag + "", "1"); } /// /// 上一条更新摄像头ID /// private string SubCid = ""; /// /// 上一条更新状态 /// private string SubC_STATE = ""; /// /// 更新摄像头播放状态 /// /// 摄像头信息ID /// 状态:0、在线;1、离线; private void UpdCampStart(string cid, string C_STATE) { //判断当前更新是否与上次更新一致 if (SubCid.Equals(cid) && SubC_STATE.Equals(C_STATE)) { //设置允许继续进行下一条数据播放 bolIsNexCamera = true; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "状态更新与上次一致,信息ID:" + cid + ",信息状态:" + C_STATE, msgType = EnumLogMsgTypeEnum.Error, path = "Error" }); return; } MyFileLogHelper.WriteFire(new LogInfoMo() { message = "更新信息状态:信息ID:" + cid + ",信息状态:" + C_STATE, msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); try { //拼接状态更新Sql string sqlUpd = " UPDATE tbl_camera set C_STATE='" + C_STATE + "' WHERE id='" + cid + "' "; //执行Sql CameraMySqlHelp.ExecuteSql(sqlUpd); } catch (Exception ex) { AddMsg("更新状态异常:" + ex); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "更新状态异常:" + ex, msgType = EnumLogMsgTypeEnum.Error, path = "Error" }); } try { //实例化信息ID string ID = Guid.NewGuid().ToString("N"); //拼接插入验证日志Sql string sqlIns = " INSERT INTO tbl_camera_check_log (ID,CID,createtime,C_STATE) VALUES ('" + ID + "','" + cid + "',NOW(),'" + C_STATE + "') "; //执行Sql CameraMySqlHelp.ExecuteSql(sqlIns); } catch (Exception ex) { AddMsg("插入验证记录异常:" + ex); MyFileLogHelper.WriteFire(new LogInfoMo() { message = "插入验证记录异常:" + ex, msgType = EnumLogMsgTypeEnum.Error, path = "Error" }); } SubCid = cid; SubC_STATE = C_STATE; //控制 switch (C_STATE) { //正常播放 case "0": //延迟10秒后继续播放下一条 new Thread(() => { MyFileLogHelper.WriteFire(new LogInfoMo() { message = "正常播放,延迟5秒后继续播放下一条", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); Thread.Sleep(1000 * 5); bolIsNexCamera = true; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "正常播放,继续播放下一条", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); }).Start(); break; //异常播放 default: //设置允许继续进行下一条数据播放 bolIsNexCamera = true; MyFileLogHelper.WriteFire(new LogInfoMo() { message = "异常播放,继续播放下一条", msgType = EnumLogMsgTypeEnum.Error, path = "Info" }); break; } } /// /// 添加显示消息信息 /// /// private void AddMsg(string msgStr) { try { richTextBox1.Invoke(new MethodInvoker(() => { //判断显示信息是否超过1万字 if (richTextBox1.Text.Length > 100000) { //文字太多,清除 richTextBox1.Clear(); } //添加显示文字 richTextBox1.AppendText(DateTime.Now + " " + msgStr + System.Environment.NewLine); })); } catch (Exception ex) { } } /// /// 程序退出 /// /// /// private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { //停止线程内循环 bolWhere = false; } catch (Exception ex) { } } } }