在后台任务中实例化WriteableImage

时间:2012-11-11 04:09:47

标签: windows-8 windows-runtime

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

生成我的图像意味着创建一个新的图像并在其上绘制我的东西但是由于某种原因我在尝试创建WriteableBitmap的新实例时遇到异常:

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

  

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

抛出此异常:

  

该应用程序调用了一个为a编组的接口   不同的线程。 (HRESULT的例外情况:0x8001010E   (RPC_E_WRONG_THREAD))

我的印象是因为后台任务中没有UI线程,但是为什么WriteableBitmap需要UI线程呢?

知道如何解决这个问题吗?如何在后台任务中实例化WriteableBitmap?

3 个答案:

答案 0 :(得分:1)

事实证明这在Windows 8中是不可能的。

通过XamlBackgroundTask

,可以在后续版本Win 8.1和UWP中实现

答案 1 :(得分:-1)

您可以使用Dispatcher

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

<强>更新

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

答案 2 :(得分:-1)

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

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

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