Run code on UI thread in WinRT
Solution 1:
It's easier to directly get the CoreWindow from the non-UI thread. The following code will work everywhere, even when GetForCurrentThread()
or Window.Current
returns null.
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
for example:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
You'll need to reference Windows.ApplicationModel.Core
namespace:
using Windows.ApplicationModel.Core;
Solution 2:
Use:
From your UI thread, execute:
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
From your background (non UI thread)
dispatcher.RunAsync(DispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
That should work on both CP and later builds.