public bool CreateDAGroupAsync(GroupProperties properties, Action<WorkerThread.Task, RunWorkerCompletedEventArgs> completed)
        {
            return DoAsync((task, args) =>
            {
                args.Result = server.AddGroup(
                    Interlocked.Increment(ref daGroupClientId),
                    properties.Name,
                    properties.Active,
                    properties.UpdateRate,
                    properties.PercentDeadband);
            },
            (task, args) =>
            {
                Children.Add(new DAGroupNode(this, (Group)args.Result));

                completed(task, args);
            });
        }
        /// <summary>
        /// Sets new OPC DA group properties.
        /// </summary>
        /// <param name="properties">New OPC DA group properties.</param>
		public void SetProperties(GroupProperties properties)
		{
			if(@group == null)
				throw new ObjectDisposedException("Group");

			int revisedUpdateRate;
			groupManagement.SetState(
				properties.UpdateRate, 
				out revisedUpdateRate, 
				properties.Active ? 1 : 0, 
				properties.TimeBias, 
				properties.PercentDeadband, 
				properties.Locale.LCID, 
				properties.ClientId);

			ClientId = properties.ClientId;
			UpdateRate = revisedUpdateRate;

			if(!string.Equals(properties.Name, Name))
				groupManagement.SetName(properties.Name);
			Name = properties.Name;
		}