public async Task <WorkspaceItemListViewModel> GetWorkspaceRgbMatrices(string Name, CancellationToken cancellationToken, LoadOptions loadOptions = LoadOptions.PreserveWhitespace) { var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Workspaces", Name); using (StreamReader st = new StreamReader(path)) { XmlReaderSettings settings = new XmlReaderSettings(); settings.Async = true; settings.DtdProcessing = DtdProcessing.Parse; using (XmlReader reader = XmlReader.Create(st, settings)) { if (WorkspaceDictionary[Name].Content == null) { WorkspaceDictionary[Name].Content = await XDocument.LoadAsync(reader, loadOptions, cancellationToken); } XNamespace ns = "http://www.qlcplus.org/Workspace"; var values = WorkspaceDictionary[Name].Content.Root .Element(ns + "Engine") .Elements(ns + "Function") .Where(item => (string)item.Attribute("Type") == "RGBMatrix") .ToList(); WorkspaceItemListViewModel model = new WorkspaceItemListViewModel(); foreach (var item in values) { model.WorkspaceItems.Add(new RgbMatrix { Name = item.Attribute("Name").Value, Id = item.Attribute("ID").Value, Type = item.Attribute("Type").Value, Path = new Script { Name = item.Attribute("Path").Value } }); } st.Dispose(); st.Close(); reader.Dispose(); reader.Close(); return(model); } } }