using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using DBFactory; using CommonLib; using System.Threading; namespace WcfControlMonitorLib { public static class CUpdateIoControl { //static Thread mythread; static Thread mythreadDarkCasket; //NewWrieDarkCasket 位置4.1 static bool exitThreadDarkCasket = false; //NewWrieDarkCasket 位置4.2 static string _CUpdateIoControlError = "";//监控调度类错误说明 public static string CUpdateIoControlError { get { return _CUpdateIoControlError; } set { _CUpdateIoControlError = value; } } public static event RefreshMonitorEventHandler RefreshMonitor; public static void OnRefreshMonitor(RefreshMonitorEventArgs e) { if (RefreshMonitor != null) { RefreshMonitor(e); } } static StringBuilder temp = new StringBuilder(); static DBOperator dbo = new DBOperator(); static object lockThis = new object(); static object lockThisDarkCasket = new object(); //NewWrieDarkCasket 位置4.3 public static List sql = new List(); //NewWrieDarkCasket 位置6 private static void BeginListenDarkCasket() {//20091107 while (!exitThreadDarkCasket) { try { lock (lockThisDarkCasket) {//20130226richard.liu RunDark(); } } catch (Exception ex) { _CUpdateIoControlError = ex.StackTrace + ex.Message; } finally { Thread.Sleep(200); //200ms 查看一次 } } } //NewWrieDarkCasket 位置8 public static void EndListen() { #region NewWrieDarkCasket 位置8.1 if (CommonClassLib.CCarryConvert.dark.Count == 0) { exitThreadDarkCasket = true; if (mythreadDarkCasket != null) { mythreadDarkCasket.Abort(); mythreadDarkCasket = null; } } else { if (mythreadDarkCasket == null) { mythreadDarkCasket = new Thread(new ThreadStart(BeginListenDarkCasket)); mythreadDarkCasket.IsBackground = true; mythreadDarkCasket.Start(); while (true) { if (CommonClassLib.CCarryConvert.dark.Count == 0) { exitThreadDarkCasket = true; mythreadDarkCasket.Abort(); mythreadDarkCasket = null; break; } } } else { while (true) { if (CommonClassLib.CCarryConvert.dark.Count == 0) { exitThreadDarkCasket = true; mythreadDarkCasket.Abort(); mythreadDarkCasket = null; break; } } } } #endregion } //NewWrieDarkCasket 位置5 public static void StartListen() { exitThreadDarkCasket = false; mythreadDarkCasket = new Thread(new ThreadStart(BeginListenDarkCasket)); //新建线程mythreadDarkCasket处理黑匣子 mythreadDarkCasket.IsBackground = true; mythreadDarkCasket.Start(); } //NewWrieDarkCasket 位置7 public static void RunDark() { if (CommonClassLib.CCarryConvert.dark.Count > 0) { for (int i = 0; i < CommonClassLib.CCarryConvert.dark.Count; i++) { try { if (CommonClassLib.CCarryConvert.dark[i] == null) break; //dark中数量近万时,偶尔会出现 dark[0] 值为null string[] aaa = CommonClassLib.CCarryConvert.dark[i].ToString().Split('|'); CommonClassLib.CCarryConvert.kkk(aaa[0], aaa[1], aaa[2], aaa[3], aaa[4]); //将 dark[i] 的记录写入文件中 //dbo1.ExecuteSql("insert into test(T1) values('" + sql[i].ToString() + "')"); } catch (Exception exa) { _CUpdateIoControlError = string.Format("解析PLC反馈数据的记录设备状态时发生错误:{0}", exa.StackTrace + exa.Message); RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", _CUpdateIoControlError); OnRefreshMonitor(rmea); } finally { CommonClassLib.CCarryConvert.dark.RemoveAt(i);//移除 dark[i] i--; } } } } } }