我正在尝试从应用中的页面创建一个磁贴,它工作正常。
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" />
答案 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线程上进行。检查我编辑的部分代码。
如果你没有得到答案,无论如何都会回来。