void _IB状态_健康状态变化(M设备 __设备, U按钮 __按钮, M概要状态 __概要状态)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new Action <M设备, U按钮, M概要状态>(_IB状态_健康状态变化), __设备, __按钮, __概要状态);
                return;
            }
            __设备.概要状态 = __概要状态;
            __按钮.Text = string.Format("{0}({1})", __设备.设备标识, __设备.概要状态.未清除告警数量);
            switch (__概要状态.健康状态)
            {
            case E健康状态.优:
                __按钮.颜色 = Color.YellowGreen;
                break;

            case E健康状态.良:
                __按钮.颜色 = Color.FromArgb(38, 164, 221);
                break;

            case E健康状态.中:
                __按钮.颜色 = Color.Orange;
                break;

            case E健康状态.差:
                __按钮.颜色 = Color.Red;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 void 访问入口_已断开(M设备 __设备, U按钮 __按钮)
 {
     if (this.InvokeRequired)
     {
         this.BeginInvoke(new Action <M设备, U按钮>(访问入口_已断开), __设备, __按钮);
         return;
     }
     __按钮.颜色 = Color.Gray;
 }
        void 访问入口_已连接(M设备 __设备, U按钮 __按钮)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new Action <M设备, U按钮>(访问入口_已连接), __设备, __按钮);
                return;
            }
            if (__设备.片 == null)
            {
                var __IB名片 = new B名片_C(__设备.访问入口);
                var __IB状态 = new B状态_C(__设备.访问入口);
                __IB状态.健康状态变化 += q => _IB状态_健康状态变化(__设备, __按钮, q);

                var __任务 = new Task(() =>
                {
                    Let.Us.Retry(10000, 100, null, null).Do(() =>
                    {
                        __设备.片    = __IB名片.片;
                        __设备.概要状态 = __IB状态.查询概要状态();
                    });
                });
                __任务.ContinueWith(task =>
                {
                    var __提示 = new StringBuilder();
                    __提示
                    .AppendFormat("IP:  {0}", __设备.IP).AppendLine()
                    .AppendFormat("端口号:  {0}", __设备.端口号).AppendLine()
                    .AppendFormat("版本号:  {0}", __设备.片 == null ? "" : __设备.片.版本号).AppendLine()
                    .AppendFormat("版本时间:  {0}", __设备.片 == null ? "" : __设备.片.版本时间).AppendLine();
                    this.toolTip1.SetToolTip(__按钮, __提示.ToString());
                    _IB状态_健康状态变化(__设备, __按钮, __设备.概要状态);
                },
                                  CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion,
                                  TaskScheduler.FromCurrentSynchronizationContext());
                __任务.ContinueWith(task =>
                {
                    task.Exception.Handle(q => true);
                },
                                  CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted,
                                  TaskScheduler.FromCurrentSynchronizationContext());

                __任务.Start();
            }
        }
        private List <M设备> 查询设备列表(string __文件路径)
        {
            var __设备列表  = new List <M设备>();
            var __文件    = H路径.打开文件(__文件路径);
            var __XML文档 = XDocument.Load(__文件);

            __文件.Close();
            var __根节点 = __XML文档.Root;

            foreach (XElement __节点 in __根节点.XPathSelectElements("./设备"))
            {
                var __IP  = IPAddress.Parse(__节点.Attribute("IP").Value);
                var __端口号 = int.Parse(__节点.Attribute("端口号").Value);
                var __设备  = new M设备
                {
                    分组   = __节点.Attribute("分类").Value,
                    设备标识 = __节点.Attribute("名称").Value,
                    IP   = __IP,
                    端口号  = __端口号
                };
                __设备列表.Add(__设备);
            }
            return(__设备列表);
        }
 public F编辑设备(M设备 __设备)
 {
     InitializeComponent();
     _设备 = __设备;
 }