/// <summary> /// Calls the PromptForDutMetadata delegate for all referenced DUTs. /// </summary> internal void StartResourcePromptAsync(TestPlanRun planRun, IEnumerable <IResource> _resources) { var resources = _resources.Where(x => x != null).ToArray(); List <Type> componentSettingsWithMetaData = new List <Type>(); var componentSettings = PluginManager.GetPlugins <ComponentSettings>(); bool AnyMetaData = false; planRun.PromptWaitHandle.Reset(); try { foreach (var setting in componentSettings) { foreach (var member in setting.GetMembers()) { var attr = member.GetAttribute <MetaDataAttribute>(); if (attr != null && attr.PromptUser) { AnyMetaData = true; componentSettingsWithMetaData.Add(setting); } } } foreach (var resource in resources) { var type = TypeData.GetTypeData(resource); foreach (var __prop in type.GetMembers()) { IMemberData prop = __prop; var attr = prop.GetAttribute <MetaDataAttribute>(); if (attr != null && attr.PromptUser) { AnyMetaData = true; } } } } catch { // this is just a defensive catch to make sure that the waithandle is not left unset (and we risk waiting for it indefinitely) planRun.PromptWaitHandle.Set(); throw; } if (AnyMetaData && EngineSettings.Current.PromptForMetaData) { TapThread.Start(() => { try { List <object> objects = new List <object>(); objects.AddRange(componentSettingsWithMetaData.Select(ComponentSettings.GetCurrent)); objects.AddRange(resources); planRun.PromptedResources = resources; var obj = new MetadataPromptObject { Resources = objects }; UserInput.Request(obj, false); if (obj.Response == MetadataPromptObject.PromptResponse.Abort) { planRun.MainThread.Abort(); } } catch (Exception e) { Log.Debug(e); planRun.MainThread.Abort("Error occured while executing platform requests. Metadata prompt can be disabled from the Engine settings menu."); } finally { planRun.PromptWaitHandle.Set(); } }, name: "Request Metadata"); } else { planRun.PromptWaitHandle.Set(); } }
/// <summary> /// Triggers the PropertyChanged event. /// </summary> /// <param name="propertyName">string name of which property has been changed.</param> public void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); UserInput.NotifyChanged(this, propertyName); }