4

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

生成我的图像意味着创建一个新图像并在其上绘制我的东西,但由于某种原因,我在尝试创建 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?

4

3 回答 3

1

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

在后续版本 Win 8.1 和 UWP 中通过XamlBackgroundTask 实现了它

于 2016-06-20T14:04:34.157 回答
-1

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

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

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

于 2013-10-16T14:40:04.947 回答
-1

您可以使用Dispatcher

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

更新

Dispatcher.RunAsync
    (CoreDispatcherPriority.Normal, 
    () => new WriteableBitmap(10, 10));
于 2012-11-11T06:12:23.017 回答