0

WinRT 项目,C++/CX。我正在尝试将 PNG 文件加载到 WriteableBitmap 中。我将Source属性设置为IRandomAccessStream. 要从文件中获取流,必须使用异步操作 - WinRT 中没有打开同步文件。

我的异步完成处理程序似乎是在随机工作线程上执行的。在那个处理程序中,最无辜的操作(比如构造一个新的 WriteableBitmap)会导致 WrongThreadException。从运行到运行是不可重现的。

这是怎么回事?我应该把它归结为预发布的时髦吗?

Visual Studio 2012 RC,Windows 8 构建 8400。

4

1 回答 1

1

当您与 UI 元素交互时,它们需要在 UI 线程上执行。确保您在 UI 线程上的最简单方法是使用 PPL 延续 - 如果您使用创建流异步 API,则传递给“.then”方法的 lambda 应该在原始线程的线程上下文中运行- 通常是 UI 线程。

如果您无法通过 PPL 回到 UI 线程,请使用 CoreDispatcher.RunAsync() 并在传递给 RunAsync 的 lambda 中完成您的工作 - 这将始终在 UI 线程上运行。

于 2012-06-23T05:26:36.633 回答