2012-11-11 22 views
4

我正在用Live Tiles编写Windows 8商店应用程序。每个活动平铺图片都需要每x分钟刷新一次。我使用带有时间触发器的后台任务来生成我的图像并刷新图块。在后台任务中实例化WriteableImage任务

生成我的形象,意味着创造一个新的,画上是我的东西,但由于某种原因,我得到一个异常试图创建WriteableBitmap的一个新的实例时:

var newImage = new Windows.UI.Xaml.Media.Imaging.WriteableBitmap(10, 10); 

var newImage = BitmapFactory.New(10,10);

抛出此异常:

应用程序调用这是整理了 不同的线程的接口。 (异常来自HRESULT:0x8001010E (RPC_E_WRONG_THREAD))

我有一个印象,这是因为在后台任务没有UI线程,但话又说回来,为什么会在WriteableBitmap的需要UI线程?

任何想法如何解决这个问题?我将如何实例化我的后台任务中的WriteableBitmap?

+0

好问题。我很想看到实际可行的答案。 – DarrellNorton

回答

-1

您可以使用Dispatcher

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    new Action(() => createBitmap) 
); 

UPDATE

Dispatcher.RunAsync 
    (CoreDispatcherPriority.Normal, 
    () => new WriteableBitmap(10, 10)); 
+1

这可能适用于常规应用程序,但由于这是WinRT后台任务,因此没有可用的Application.Current.Dispacher。你有没有一个工作代码片段放在WinRT的后台任务的上下文中? – AlexDrenea

+0

@AlexDrenea检查更新 – Mayank

+0

@Mayank该代码也不起作用。分派器引用ServiceModel.Dispatcher(它没有RunAsync方法)或标准应用程序Dispatcher。我遇到了同样的问题。 – DarrellNorton

-1

您仍然可以使用下面的代码:

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () =>{ 
       // Your UI update code goes here! 
       WriteableBitmap writeableBmp = BitmapFactory.New(imageWidth, imageHeight); 
      }); 

但很可能你会得到另一个异常(InvalidOperationException异常)说: 一个方法在意外的时间被调用。 WinRT信息:由于尚未创建主窗口,因此无法创建新视图。