Reunion/Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.cs
using System;
using System.Threading; namespace Microsoft.UI.Dispatching { /// <summary> /// DispatcherQueueSyncContext allows developers to await calls and get back onto the /// UI thread. Needs to be installed on the UI thread through DispatcherQueueSyncContext.SetForCurrentThread /// </summary> public class DispatcherQueueSynchronizationContext : SynchronizationContext { private readonly DispatcherQueue m_dispatcherQueue; public DispatcherQueueSynchronizationContext(DispatcherQueue dispatcherQueue) { m_dispatcherQueue = dispatcherQueue; } public override void Post(SendOrPostCallback d, object state) { if (d == null) throw new ArgumentNullException(nameof(d)); m_dispatcherQueue.TryEnqueue(() => d(state)); } public override void Send(SendOrPostCallback d, object state) { throw new NotSupportedException("Send not supported"); } public override SynchronizationContext CreateCopy() { return new DispatcherQueueSynchronizationContext(m_dispatcherQueue); } } } |