即使Application位于Foreground中,Tile Creation也会失败

时间:2013-10-16 16:15:22

标签: c# windows-phone-7 windows-phone-8

我正在尝试从应用中的页面创建一个磁贴,它工作正常。

ShellTile.Create(new Uri(uri, UriKind.Relative), tileData, true);

如果我对应用程序进行逻辑删除,然后将应用程序放回前台然后尝试创建磁贴,我会收到以下错误消息:

System.InvalidOperationException: Tiles can only be created when the application is in the foreground
   at Microsoft.Phone.Shell.SafeNativeMethods.ThrowExceptionFromHResult(Int32 hr, Exception defaultException)
   at Microsoft.Phone.Shell.ShellTile.Create(Uri navigationUri, ShellTileData initialData, Boolean supportsWideTile)

它只发生在一个相当低端的设备上

知道如何解决这个问题吗?

修改: 这是调用tile创建的函数。

    private void OnPinToStartButtonClicked(object sender, RoutedEventArgs e)
    {
        if (MyRouteTileHelper.FindCommuteTile() == null)
        {
            LiveTileHelper.CreateEmptyTile();
        }
    }

和xaml:

   <Button x:Name="PinToStartButton" Click="OnPinToStartButtonClicked" />

1 个答案:

答案 0 :(得分:2)

好吧,在创建磁贴之前,只需检查是否已创建应用。如果已经创建,那么您将收到错误。我想可能在你的情况下掩盖了错误。

Dispatcher.BeginInvoke(()=>{
ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("any string of uri or search for unique prop"));
if (TileToFind == null)
{
   ShellTile.Create(Navi_Uri , tileData, true);
   MessageBox.Show("Tile is created.");
}
else
{
   TileToFind.Update(tileData);
   MessageBox.Show("Tile is updated");
}});

修改 我认为代码在单独的线程上执行时会发生无效操作。你必须在UI线程上进行。检查我编辑的部分代码。

如果你没有得到答案,无论如何都会回来。