// todo: to encapsulate /// <summary> /// Declares a set of properties and values to be set on an item or items. /// </summary> /// <param name="pproparray">An <see cref="IPropertyChangeArray"/>, which accesses a collection of <see cref="IPropertyChange"/> objects that specify the properties to be set and their new values.</param> /// <remarks>This method does not set the new property values, it merely declares them. To set property values on an item or a group of items, you must make at least the sequence of calls detailed here: /// <ol><li>Call <see cref="SetProperties"/> to declare the specific properties to be set and their new values.</li> /// <li>Call <see cref="ApplyPropertiesToItem(ShellObject)"/> or <see cref="ApplyPropertiesToItem(IShellItem)"/> to declare the item or items whose properties are to be set.</li> /// <li>Call <see cref="PerformOperations"/> to apply the properties to the item or items.</li></ol></remarks> /// <exception cref="ArgumentNullException">Exception thrown when a parameter is null.</exception> /// <exception cref="ObjectDisposedException">Exception thrown when this object is disposed.</exception> /// <exception cref="Win32Exception">Exception thrown when this method fails because of an error in the Win32 COM API implementation.</exception> public void SetProperties(IPropertyChangeArray pproparray) { if (pproparray == null) { throw new ArgumentNullException(nameof(pproparray)); } if (disposed) { throw new ObjectDisposedException(nameof(FileOperation)); } HResult hr = fileOperation.SetProperties(pproparray); if (!CoreErrorHelper.Succeeded(hr)) { Marshal.ThrowExceptionForHR((int)hr); } }