1

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

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)

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

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

编辑:这是调用瓦片创建的函数。

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

和 xml:

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

1 回答 1

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 线程上完成。检查我编辑的代码部分。

无论如何,如果您没有得到答案,请返回。

于 2013-10-16T18:11:39.470 回答