首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackgroundTask & XamlRenderingBackgroundTask & RenderTargetBitmap

BackgroundTask & XamlRenderingBackgroundTask & RenderTargetBitmap
EN

Stack Overflow用户
提问于 2014-11-09 05:54:16
回答 1查看 345关注 0票数 0

我正在开发一个Live Tile应用程序,以便在Live Tile上显示当前的网络状态。

我已经有了一个可以工作的XamlRenderingBackgroundTask,我可以从XML文件中加载自定义瓷砖模板,并使用RenderTargetBitmap将其呈现为PNG文件。

但如果我启动应用程序并注册后台任务,我必须等到BackgroundTask开始看到更新的Live Tile。

据我所知,不可能在主应用程序中使用此代码。RendertargetBitmap需要XAML树或XamlRenderingBackgroundTask中的元素。

那么,如何在注册任务后更新Live Tile目录?

代码语言:javascript
复制
        var small_folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
        var small_file = await small_folder.GetFileAsync("WWAN_Tile_small.xml");
        string small_szCustomTileXML = await Windows.Storage.FileIO.ReadTextAsync(small_file);

        Border small_tile = XamlReader.Load(small_szCustomTileXML) as Border;
        if (null != small_tile)
        {
                Grid grid = small_tile.Child as Grid;

                Image logo = grid.FindName("img_Center") as Image;
                var logo_img = new BitmapImage() { CreateOptions = BitmapCreateOptions.None };
                logo_img.UriSource = new Uri("ms-appx:///Assets/Signal/WWAN/big/3.png");
                logo.Source = logo_img;

                RenderTargetBitmap rtb = new RenderTargetBitmap();
                await rtb.RenderAsync(small_tile, 71, 71);
                IBuffer pixels = await rtb.GetPixelsAsync();
                DataReader dReader = Windows.Storage.Streams.DataReader.FromBuffer(pixels);
                byte[] data = new byte[pixels.Length];
                dReader.ReadBytes(data);

                var outputFile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("Square71x71Logo.scale-100.png", Windows.Storage.CreationCollisionOption.ReplaceExisting);
                var outputStream = await outputFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
                BitmapEncoder enc = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, outputStream);
                enc.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)rtb.PixelWidth, (uint)rtb.PixelHeight, 96, 96, data);
                await enc.FlushAsync();
        }
EN

回答 1

Stack Overflow用户

发布于 2015-08-28 22:56:44

我不认为你可以强迫BGTask在他注册后立即执行;你可以做的是创建一个新的外部类来更新磁贴,并在注册后立即在BGTask和应用程序中使用它。效果应该是一样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26822497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档