示例#1
0
        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());
        }
示例#2
0
        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());
        }