using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using IntelligentControlForsx.Service; using IntelligentControlForsx.Service.ZM; using IntelligentControlForsx.Service.ZM.Domain; using log4net; namespace IntelligentControlForsx.MyControls.zm.map { public partial class XS_Project1 : MapControl { private static ILog logger = LogManager.GetLogger("AppInfoLog"); /// /// 数据访问是否结束 /// private bool IsRefreshDataOver = true; /// /// 绑定页面是否结束 /// private bool IsBindFormOver = true; private NavService navSvc; public XS_Project1() { InitializeComponent(); Init(); navSvc = NavService.Instance; IsRefreshDataOver = false; Thread t1 = new Thread(RefreshData); t1.IsBackground = true; t1.Start(); FormDataBind(); IsBindFormOver = false; Thread t = new Thread(BindFormInvoke); t.IsBackground = true; t.Start(); } public override void Active() { timer1.Enabled = true; } public override void DeActive() { timer1.Enabled = false; } private void timer1_Tick(object sender, EventArgs e) { if (IsRefreshDataOver) { IsRefreshDataOver = false; Thread t = new Thread(RefreshData); t.IsBackground = true; t.Start(); } if (IsBindFormOver) { IsBindFormOver = false; Thread t = new Thread(BindFormInvoke); t.IsBackground = true; t.Start(); } } private void RefreshData() { ZmWindturbineInfoSvc.GetInfo(this.stationId, this.projectId); IsRefreshDataOver = true; } public delegate void UpdateFormInfoDelegate(); public void BindFormInvoke() { UpdateFormInfoDelegate del = new UpdateFormInfoDelegate(FormDataBind); if (this.InvokeRequired) { this.BeginInvoke(del, new object[] { }); } else { FormDataBind(); } IsBindFormOver = true; } #region //key: 风机ID private Dictionary dicWindturbineInfoControl; private string projectId = "XS01_GC"; private string stationId = "XS_FDC";// private void Init() { dicWindturbineInfoControl = new Dictionary(); foreach (var p in this.Controls) { if (p is WindturbineInfoControl) { WindturbineInfoControl wifo = p as WindturbineInfoControl; if (wifo != null && !String.IsNullOrWhiteSpace(wifo.WindturbineId) && !dicWindturbineInfoControl.ContainsKey(wifo.WindturbineId)) { dicWindturbineInfoControl.Add(wifo.WindturbineId, wifo); } } } } private void FormDataBind() { try { if (!timer1.Enabled) { return; } ZmWindturbineInfo[] tmplist = new ZmWindturbineInfo[ZmWindturbineInfoSvc.infoList.Count]; ZmWindturbineInfoSvc.infoList.CopyTo(tmplist, 0); IList list = tmplist.Where(s => s.ProjectId == projectId && s.StationId == stationId).ToList(); if (this.IsHandleCreated) { this.BeginInvoke((Action)delegate { for (int i = 0; i < list.Count; i++) { if (dicWindturbineInfoControl.ContainsKey(list[i].WindturbineId)) { dicWindturbineInfoControl[list[i].WindturbineId].BindData(list[i].Power, list[i].WindSpeed, Convert.ToInt32(list[i].Status)); } } } ); } } catch { } } private void Windturbine_MyClick(object sender, EventArgs e) { try { WindturbineInfoControl icon = (WindturbineInfoControl)sender; if (icon != null) { navSvc.NavForWindturbine("pictureBoxParamters", icon.WindturbineId, stationId); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion } }