CPF/CPF.Android/AndroidSynchronizationContext.cs
2023-11-21 23:05:03 +08:00

49 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace CPF.Android
{
class AndroidSynchronizationContext : SynchronizationContext
{
private Handler _handler;
public AndroidSynchronizationContext()
{
_handler = new Handler(Application.Context.MainLooper);
}
public override void Post(SendOrPostCallback d, object state)
{
_handler.Post(() =>
{
d(state);
});
}
public override void Send(SendOrPostCallback d, object state)
{
if (CPF.Threading.Dispatcher.MainThread.CheckAccess())
{
d(state);
}
else
{
ManualResetEvent manual = new ManualResetEvent(false);
_handler.Post(() =>
{
d(state);
manual.Set();
});
manual.WaitOne();
}
}
}
}