2013-10-16 83 views
2

我試圖從應用程序中的頁面創建圖塊,並且工作正常。即使應用程序處於前臺,圖塊創建失敗

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(); 
     } 
    } 

和XAML:

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

你在哪裏試圖創建瓷磚?它是在導航相關事件中還是直接響應用戶操作? –

+0

按鈕點擊(所以它絕對是前景) – wolfovercats

+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線程上做到這一點。檢查我編輯的部分代碼。

反正如果你沒有得到答案回來。

+0

嗨@max,感謝您的幫助。我已經在檢查瓷磚是否存在。查看缺少調用功能的編輯答案 – wolfovercats

+0

@wolfovercats查看編輯答案。 – Mani

相關問題