2012-06-22 117 views
0

WinRT項目,C++/CX。我正試圖將一個PNG文件加載到一個WriteableBitmap中。我將Source財產設置爲IRandomAccessStream。要從文件中獲取流,必須使用異步操作 - WinRT中沒有打開同步文件。WinRT異步處理程序中的WrongThreadException

我的異步完成處理程序似乎在隨機工作線程上執行。在那個處理程序中,最無辜的操作(如構造一個新的WriteableBitmap)會導致WrongThreadException。從運行到運行都無法重現。

發生了什麼事?我應該把它粉筆預先發布funkiness?要在UI線程上執行

的Visual Studio 2012 RC,Windows 8的構建8400

回答

1

當你與UI元素進行交互,他們的需要。確保使用UI線程的最簡單方法是使用PPL延續 - 如果使用創建流異步API,則傳遞給「.then」方法的lambda應運行在原始線程的線程上下文中 - 通常是UI線程。

如果您無法通過PPL返回到UI線程,請使用CoreDispatcher.RunAsync()並在傳遞給RunAsync的lambda中執行您的工作 - 該工作將始終在UI線程上運行。