我使用以下代码获取一个自定义用户控件,从中生成一个位图,然后将其保存到独立的存储中,以用于wp8活动磁贴。

public static void UpdateTile()
{
    var frontTile = new LiveTileRegular(); // Custom Control
    frontTile.Measure(new Size(173, 173));
    frontTile.Arrange(new Rect(0, 0, 173, 173));

    var bmp = new WriteableBitmap(173, 173);
    bmp.Render(frontTile, null);
    bmp.Invalidate();

    const string filename = "/LiveTiles/LiveTileRegular.jpg";

    using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!isf.DirectoryExists("/LiveTiles"))
        {
            isf.CreateDirectory("/LiveTiles");
        }

        using (var stream = isf.OpenFile(filename, FileMode.OpenOrCreate))
        {
            bmp.SaveJpeg(stream, 173, 173, 0, 100);
        }

        Debug.WriteLine("Image Exists: " + (isf.FileExists(filename) ? "Yes" : "No")); // Displays "Yes"
    }

    ShellTile.ActiveTiles.First().Update(new FlipTileData
    {
        Title = "Title",
        BackgroundImage = new Uri("isostore:" + filename, UriKind.Absolute),
    }); // Throws a NotSupportedException
}

NotSupportedException被抛出到带有非常非描述性消息的ShellTile.ActiveTiles.First().Update()方法上。
有什么事我明显做错了吗?

最佳答案

“targetInvocationException”异常实际上隐藏了“notsupportedException”异常的潜在问题,我在将ShellTile.ActiveTiles.First().Update()移出UI线程后发现了该异常。
这个异常仍然无法描述问题是什么,但是在通过不同的论坛和文档进行了一些搜索之后,我发现动态创建的图像的路径在与活动平铺一起使用时非常重要。
如果要将独立存储中的图像用于活动磁贴或外壳磁贴,则基本文件夹必须是
/共享/外壳内容
更换后

const string filename = "/LiveTiles/LiveTileRegular.jpg";


const string filename = "/Shared/ShellContent/LiveTileRegular.jpg";

一切正常。
我们的Windows Phone开发人员能否获得更好的异常消息?!?:)

09-27 04:52