バックグラウンドタスク内のコードだけでなく、バックグラウンドタスクからアプリでメソッドを実行できるかどうか疑問に思っていました。質問する理由は、ライブタイルをWebサーバーからのデータで更新するバックグラウンドタスクがあるためです。次のように、バックグラウンドタスク内にWebサービス呼び出しを配置します。
public sealed class TileUpdater : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
ServiceReference.WebServiceSoapClient test = new ServiceReference.WebServiceSoapClient();
var nb = await test.GetLatestDataAsync("temp");
double temperature = nb.Value;
string unit = nb.Unit;
string latestTemp = " " + nb.Value + " " + nb.Unit;
var defferal = taskInstance.GetDeferral();
var updater = TileUpdateManager.CreateTileUpdaterForApplication();
updater.EnableNotificationQueue(true);
updater.Clear();
for (int i = 1; i < 6; i++)
{
var tile = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText02);
tile.GetElementsByTagName("text")[0].InnerText = "Tile " + latestTemp;
tile.GetElementsByTagName("text")[1].InnerText = DateTime.Now.ToString("hh-mm");
updater.Update(new TileNotification(tile));
}
defferal.Complete();
}
}
ただし、アプリを実行しても何も起こらず、エラーは発生しません。Webサービスの呼び出しで停止しているようです。とにかく、バックグラウンドタスクにアプリコードのメソッドを呼び出させることができますか?