| File: ProgressEventArgs.cs | Web Access |
| Project: src\sdk\src\Microsoft.Win32.Msi\Microsoft.Win32.Msi.csproj (Microsoft.Win32.Msi) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.RegularExpressions; namespace Microsoft.Win32.Msi { /// <summary> /// Defines event data for a progress message. /// </summary> public class ProgressEventArgs : InstallMessageEventArgs { /// <summary> /// Returns the type of progress message (derived from the first field). /// </summary> public ProgressType ProgressType => (ProgressType)Fields[0]; /// <summary> /// The message fields. /// </summary> public readonly int[] Fields; public ProgressEventArgs(string message, InstallMessage messageType, MessageBox style) : base(message, messageType, style) { // Progress messages have up to 4 fields and are formatted as "<field>: <fieldValue>", e.g. // "1: 2 2: 25 3: 0 4: 1". Not all fields may be present and some fields have no meaning // depending on the message subtype (even though they are present). // // See https://docs.microsoft.com/en-us/windows/win32/msi/parsing-windows-installer-messages Match match = Regex.Match(message, @"(?<field>\d):\s+(?<value>\d+)"); List<int> fields = new(); while (match.Success) { fields.Add(Convert.ToInt32(match.Groups["value"].Value)); match = match.NextMatch(); } Fields = fields.ToArray(); } } }