private static IAsyncOperation <IEnumerable <ITextDisplay> > loadDisplaysForConfigs(IEnumerable <TextDisplayConfig> configs) { return(Task.Run(async() => { var displays = new List <ITextDisplay>(); foreach (var config in configs) { ITextDisplay driver = null; var type = Type.GetType(config.DriverType); if (null == type && null != config.DriverAssembly) { try { var assembly = Assembly.Load(new AssemblyName(config.DriverAssembly)); if (null != assembly) { type = assembly.DefinedTypes.Where(t => t.FullName == config.DriverType).FirstOrDefault().AsType(); } } catch (FileNotFoundException) { Debug.WriteLine("TextDisplayManager: Failed to load assembly " + config.DriverAssembly + " for driver " + config.DriverType); } } if (null != type) { driver = Activator.CreateInstance(type, config) as ITextDisplay; } if (null != driver) { try { await driver.InitializeAsync(); displays.Add(driver); } catch (Exception e) { Debug.WriteLine("TextDisplayManager: Failed to add driver " + type.ToString()); Debug.WriteLine("TextDisplayManager: " + e.Message); } } else { Debug.WriteLine("TextDisplayManager: Failed to add driver: " + config.DriverType); } } return displays as IEnumerable <ITextDisplay>; }).AsAsyncOperation()); }
public static IAsyncOperation <IEnumerable <ITextDisplay> > GetDisplays() { return(Task.Run(async() => { if (null == s_avaliableDisplays) { var displays = new List <ITextDisplay>(); var folder = Windows.Storage.ApplicationData.Current.LocalSettings; try { var configFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Microsoft.Maker.Devices.TextDisplay/screens.config")); var xmlString = await FileIO.ReadTextAsync(configFile); var xml = XElement.Parse(xmlString); var screensConfig = xml.Descendants("Screen"); foreach (var screenConfig in screensConfig) { var driverTypeAttribute = screensConfig.Attributes().Where(a => a.Name == "driverType").FirstOrDefault(); if (null != driverTypeAttribute) { var type = Type.GetType("Microsoft.Maker.Devices.TextDisplay." + driverTypeAttribute.Value); ITextDisplay driver = Activator.CreateInstance(type, screenConfig) as ITextDisplay; if (null != driver) { try { await driver.InitializeAsync(); displays.Add(driver); } catch (Exception e) { Debug.WriteLine("TextDisplayManager: Failed to add driver " + type.ToString()); Debug.WriteLine("TextDisplayManager: " + e.Message); } } } } s_avaliableDisplays = displays; } catch (FileNotFoundException) { Debug.WriteLine("TextDisplayManager: Screen config file not found"); } } return s_avaliableDisplays; }).AsAsyncOperation()); }