Esempio n. 1
0
        private async Task <object> TryMapObjectAsync(ManagementBaseObject managementBaseObject, Type propertyType)
        {
            var tasks              = new List <Task>();
            var objectInstance     = Activator.CreateInstance(propertyType);
            var objectInstanceName = objectInstance?.GetType().Name;

            if (objectInstance != null)
            {
                foreach (var propertyInfo in objectInstance.GetType().GetProperties())
                {
                    tasks.Add(Task.Run(() =>
                    {
                        try
                        {
                            var propertyData = managementBaseObject?.Properties[propertyInfo.Name];
                            if (!(propertyData is null))
                            {
                                TrySetValue(objectInstance, propertyInfo, propertyData);
                                LogEventHandler.Information($"{EndPoint}: {objectInstanceName}: {propertyInfo.Name}: {propertyData.Value}");
                            }
                        }
                        catch (ManagementException exception)
                        {
                            if (exception.ErrorCode != ManagementStatus.NotFound)
                            {
                                var wmiException = new WMIGeneralException(EndPoint, exception);
                                LogEventHandler.Exception(wmiException);
                            }
                        }
                        catch (Exception exception)
                        {
                            var wmiException = new WMIGeneralException(EndPoint, exception);
                            LogEventHandler.Exception(wmiException);
                        }
                    }));
                }
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            return(objectInstance);
        }