A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

73 lines
2.1 KiB

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reactive.Disposables;
using System.Text;
using System.Threading;
using CoreAnimation;
using Foundation;
using Avalonia.Platform;
using Avalonia.Shared.PlatformSupport;
using Avalonia.Threading;
namespace Avalonia.iOS
{
class PlatformThreadingInterface : IPlatformThreadingInterface
{
private bool _signaled;
public static PlatformThreadingInterface Instance { get; } = new PlatformThreadingInterface();
public bool CurrentThreadIsLoopThread => NSThread.Current.IsMainThread;
public event Action<DispatcherPriority?> Signaled;
public void RunLoop(CancellationToken cancellationToken)
{
//Mobile platforms are using external main loop
throw new NotSupportedException();
}
/*
class Timer : NSObject
{
private readonly Action _tick;
private NSTimer _timer;
public Timer(TimeSpan interval, Action tick)
{
_tick = tick;
_timer = new NSTimer(NSDate.Now, interval.TotalSeconds, true, OnTick);
}
[Export("onTick")]
private void OnTick(NSTimer nsTimer)
{
_tick();
}
protected override void Dispose(bool disposing)
{
if(disposing)
_timer.Dispose();
base.Dispose(disposing);
}
}*/
public IDisposable StartTimer(TimeSpan interval, Action tick)
=> NSTimer.CreateRepeatingScheduledTimer(interval, _ => tick());
public void Signal(DispatcherPriority prio)
{
lock (this)
{
if(_signaled)
return;
_signaled = true;
}
NSRunLoop.Main.BeginInvokeOnMainThread(() =>
{
lock (this)
_signaled = false;
Signaled?.Invoke(null);
});
}
}
}