/// <summary>
        /// 根据若干个OPC组信息创建OPC组
        /// </summary>
        /// <param name="groups"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool CreateGroups(IEnumerable <OpcGroupInfo> groups, out string message)
        {
            message = string.Empty;
            if (groups == null || groups.Count() == 0)
            {
                //message = "未提供任何OPC组信息,无法创建OPC组";
                return(false);
            }
            try
            {
                List <OpcGroupInfo> groupList = groups.ToList(); //转换为新List对象,防止枚举改变对象时出现未知影响
                foreach (var groupInfo in groupList)
                {
                    if (groupInfo == null)
                    {
                        continue;
                    }
                    string             name      = groupInfo.GroupName;    //OPC组名称
                    List <OpcItemInfo> itemInfos = groupInfo.ListItemInfo; //OPC项信息集合
                    try { OpcServer.OPCGroups.Remove(name); } catch (Exception) { } //试着移除已存在组
                    #region 新添加组方法
                    groupInfo.SetOpcGroup(OpcServer.OPCGroups, name); //重新添加OPC组
                    groupInfo.SetGroupProperty(GroupUpdateRate, IsGroupActive, IsGroupSubscribed);
                    //TODO 假如OPC组信息中已设置OPC项信息,则根据这些OPC项信息添加OPC项,否则创建组之后调用SetItems方法
                    groupInfo.SetItems(itemInfos, out message);
                    if (!ListGroupInfo.Contains(groupInfo))
                    {
                        ListGroupInfo.Add(groupInfo);
                    }
                    #endregion
                    #region 旧添加组方法
                    ////初始化OPC组信息并设置OPC组属性、添加OPC项
                    //OpcGroupInfo group = new OpcGroupInfo(OpcServer.OPCGroups, name);
                    //group.SetGroupProperty(GroupUpdateRate, IsGroupActive, IsGroupSubscribed);
                    ////假如OPC组信息中已设置OPC项信息,则根据这些OPC项信息添加OPC项,否则创建组之后调用SetItems方法
                    //group.SetItems(itemInfos, out message);

                    ////假如List中已存在,则移除
                    //if (ListGroupInfo.Contains(groupInfo))
                    //{
                    //    ListGroupInfo.Remove(groupInfo);
                    //    groupInfo.Dispose();
                    //}
                    //ListGroupInfo.Add(group);
                    #endregion
                }
            }
            catch (Exception ex)
            {
                message = "创建组出现错误:" + ex.Message;
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// 与OPC服务断开
        /// </summary>
        public void DisconnectRemoteServer()
        {
            if (Thread_Reconn != null)
            {
                Thread_Reconn.Abort();
                Thread_Reconn = null;
            }
            if (!OpcConnected)
            {
                return;
            }

            if (OpcServer != null)
            {
                OpcServer.OPCGroups.RemoveAll();
                OpcServer.Disconnect();
                OpcServer = null;
                ListGroupInfo.ForEach(g => g.Dispose());
                ListGroupInfo.Clear();
            }

            OpcConnected = false;
        }