0

スケジュールされたタスク エージェントで書き込み可能なビットマップ イメージを作成して保存することにより、ライブ タイルを更新したいと考えています。コードはアプリ内で動作しますが、バックグラウンド タスクでは、デバッガーに侵入します。

私はこの単純なコードを使用しています:

    protected override void OnInvoke(ScheduledTask task)
    {
#if DEBUG_AGENT
        ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(30));
#endif

        CreateWideTile();

        NotifyComplete();
    }

画像を作成して保存するための私のコードは次のとおりです。

private void CreateWideTile()
    {
        int width = 691;
        int height = 336;
        string imagename = "WideBackground";

        WriteableBitmap b = new WriteableBitmap(width, height);

        var canvas = new Grid();
        canvas.Width = b.PixelWidth;
        canvas.Height = b.PixelHeight;

        var background = new Canvas();
        background.Height = b.PixelHeight;
        background.Width = b.PixelWidth;

        //Created background color as Accent color    
        SolidColorBrush backColor = new SolidColorBrush(Colors.Red);
        background.Background = backColor;

        var textBlock = new TextBlock();
        textBlock.Text = "Example text";
        textBlock.FontWeight = FontWeights.Normal;
        textBlock.TextAlignment = TextAlignment.Left;
        textBlock.Margin = new Thickness(20, 20, 0, 0);
        textBlock.TextWrapping = TextWrapping.Wrap;
        textBlock.Foreground = new SolidColorBrush(Colors.White); //color of the text on the Tile    
        textBlock.FontSize = 30;

        canvas.Children.Add(textBlock);

        b.Render(background, null);
        b.Render(canvas, null);
        b.Invalidate(); //Draw bitmap

        //Save bitmap as jpeg file in Isolated Storage    
        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream imageStream = new IsolatedStorageFileStream("/Shared/ShellContent/" + imagename + ".jpg", System.IO.FileMode.Create, isf))
            {
                b.SaveJpeg(imageStream, b.PixelWidth, b.PixelHeight, 0, 100);
            }
        }
    }

アプリをテストすると、バックグラウンド タスクを実行した後、Debugger.Break(); を指すエラーが発生します。

private static void UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
    {
        if (Debugger.IsAttached)
        {
            // An unhandled exception has occurred; break into the debugger
            Debugger.Break();
        }
    }

理由がわかりません。私のコードはフォアグラウンドアプリでは機能しますが、バックグラウンドでは機能しません...

任意の解決策????

4

1 に答える 1