Глядя на операторы using
в вашем коде:
using UIKit;
...
using Windows.UI.Core;
Этого просто не может быть.UIKit
- это пространство имен Xamarin.iOS, специфичное для платформы, а Windows.UI.Core
- пространство имен, специфичное для платформы Windows, и ни в коем случае нельзя смешивать эти два в одном файле (за исключением общего проекта с директивами #if
, но этоздесь дело не в этом).
Xamarin помогает писать кроссплатформенные приложения, но вы по-прежнему не можете использовать API для конкретных платформ в ОС, для которых они недоступны.В Windows Dispatcher
используется для запуска кода в потоке пользовательского интерфейса, но эта концепция недоступна в iOS, где вместо этого используется метод InvokeOnMainThread
.
Так что, если вы пишете код, который находится на платформе- конкретный проект iOS, вы должны использовать iOS API.Если вы пишете код в платформенном проекте UWP, вы должны использовать API UWP - такие вещи, как Dispatcher
, будут работать без проблем.
Наконец, если вы пишете код в .NET Standardбиблиотека, вы не можете написать какой-либо специфичный для платформы код напрямую и должны использовать внедрение зависимостей , чтобы определить интерфейс, за которым вы скрываете использование платформо-зависимых API.