如何在Windows Phone 8中的计划任务中使用Writeablebitmap?

时间:2014-02-23 20:22:13

标签: windows-phone-8 windows-phone scheduled-tasks writablebitmap

我想通过在计划任务代理中创建并保存可写位图图像来更新我的实时图块。我的代码在应用程序内部工作,但在后台任务中,它会进入调试器

我正在使用这个简单的代码:

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

我不明白原因。我的代码在前台应用程序中运行,但不在后台运行...

任何解决方案????

1 个答案:

答案 0 :(得分:1)

你应该使用dispatcher,因为应该在UI线程中使用WriteableBitmap.Render:

protected override void OnInvoke(ScheduledTask task)
{    
  Deployment.Current.Dispatcher.BeginInvoke( () =>
  {
    CreateWideTile();
    NotifyComplete();
  } );
}