123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using System;
- using System.Runtime.CompilerServices;
- using System.Threading;
- using System.Threading.Tasks;
- using Xamarin.Forms;
- namespace InABox.Mobile.Shared
- {
-
- public struct SynchronizationContextAwaiter : INotifyCompletion
- {
- private static readonly SendOrPostCallback _postCallback = state => ((Action)state)();
- private readonly SynchronizationContext _context;
- public SynchronizationContextAwaiter(SynchronizationContext context)
- {
- _context = context;
- }
- public bool IsCompleted => _context == SynchronizationContext.Current;
- public void OnCompleted(Action continuation) => _context.Post(_postCallback, continuation);
- public void GetResult() { }
- }
-
- public static class TaskExtensions
- {
- public static void BeginInvokeOnMainThread(this Task task, Action<Task> action)
- {
- task.ContinueWith((task) =>
- {
- Device.BeginInvokeOnMainThread(() => action(task));
- });
- }
-
- public static SynchronizationContextAwaiter GetAwaiter(this SynchronizationContext context)
- {
- return new SynchronizationContextAwaiter(context);
- }
- }
- }
|