diff --git a/src/MAUI/TinyMvvm.Maui/TinyDispatcher.cs b/src/MAUI/TinyMvvm.Maui/TinyDispatcher.cs new file mode 100644 index 0000000..3c685a1 --- /dev/null +++ b/src/MAUI/TinyMvvm.Maui/TinyDispatcher.cs @@ -0,0 +1,32 @@ +using System; +namespace TinyMvvm.Maui; + +internal static class TinyDispatcher +{ + internal static void BeginInvokeOnMainThread(Action action) + { + //Run Task.Run instead, because MainThread is not supported during unit tests. + if (DeviceInfo.Platform == DevicePlatform.Unknown) + { + Task.Run(action); + return; + } + + MainThread.BeginInvokeOnMainThread(action); + } + + internal static bool IsMainThread + { + get + { + //Always return true, because MainThread is not supported during unit tests. + if (DeviceInfo.Platform == DevicePlatform.Unknown) + { + return true; + } + + return MainThread.IsMainThread; + } + } +} + diff --git a/src/MAUI/TinyMvvm.Maui/TinyView.cs b/src/MAUI/TinyMvvm.Maui/TinyView.cs index 18da4db..63670cf 100644 --- a/src/MAUI/TinyMvvm.Maui/TinyView.cs +++ b/src/MAUI/TinyMvvm.Maui/TinyView.cs @@ -1,4 +1,6 @@ -namespace TinyMvvm; +using TinyMvvm.Maui; + +namespace TinyMvvm; public abstract class TinyView : ContentPage { @@ -28,13 +30,13 @@ async Task InternalInitialize() } } - if (MainThread.IsMainThread) + if (TinyDispatcher.IsMainThread) { await InternalInitialize(); } else { - MainThread.BeginInvokeOnMainThread(async () => await InternalInitialize()); + TinyDispatcher.BeginInvokeOnMainThread(async () => await InternalInitialize()); } } @@ -47,7 +49,7 @@ protected override void OnAppearing() if (BindingContext is ITinyViewModel viewModel) { - MainThread.BeginInvokeOnMainThread(async () => + TinyDispatcher.BeginInvokeOnMainThread(async () => { await InternalLock.WaitAsync(); @@ -71,7 +73,7 @@ protected override void OnDisappearing() if (BindingContext is ITinyViewModel viewModel) { - MainThread.BeginInvokeOnMainThread(async () => + TinyDispatcher.BeginInvokeOnMainThread(async () => { await InternalLock.WaitAsync(); diff --git a/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs b/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs index cc50cd0..b4651e4 100644 --- a/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs +++ b/src/MAUI/TinyMvvm.Maui/TinyViewModel.cs @@ -1,4 +1,5 @@ using CommunityToolkit.Mvvm.ComponentModel; +using TinyMvvm.Maui; namespace TinyMvvm; @@ -42,7 +43,7 @@ public virtual Task OnAppearing() if (!hasAppeared) { - MainThread.BeginInvokeOnMainThread(async () => await OnFirstAppear()); + TinyDispatcher.BeginInvokeOnMainThread(async () => await OnFirstAppear()); } hasAppeared = true; @@ -152,13 +153,13 @@ public async void ApplyQueryAttributes(IDictionary query) QueryParameters = query; } - if (MainThread.IsMainThread) + if (TinyDispatcher.IsMainThread) { await OnParameterSet(); } else { - MainThread.BeginInvokeOnMainThread(async () => + TinyDispatcher.BeginInvokeOnMainThread(async () => { await OnParameterSet(); });