Почему я не могу привести из Action в DispatchedHandler? - PullRequest
0 голосов
/ 23 октября 2018

G'day Folks,

Мне кажется, что я не вижу ничего базового.

Действие определяется как открытый делегат void Action ().

DispatchedHandler определен как открытый делегат void DispatchedHandler ().

Тем не менее в строке RunASync генерируется следующий код: Ошибка CS1503 Аргумент 2: невозможно преобразовать из 'System.Действие 'для' Windows.UI.Core.DispatchedHandler '.

public static async Task DispatchToUI(Action action, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal )
{
    if (CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
    {
        action();
    }
    else
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( priority, action );
    }
}

Добавление явного преобразования таким образом:

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( priority, (DispatchedHandler)action ); 

завершается ошибкой с ошибкой CS0030 Невозможно преобразовать тип' System.Action 'в«Windows.UI.Core.DispatchedHandler».

Таким образом, одна версия открытого делегата void () не может преобразоваться в другую версию открытого делегата void ()?

1 Ответ

0 голосов
/ 23 октября 2018

Нельзя преобразовать такой делегат, отметьте this SO вопрос.

Однако вы можете создать новый делегат из существующего:

public static async Task DispatchToUI(Action action, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal)
{
    if (CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
    {
        action();
    }
    else
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(priority, new DispatchedHandler(action));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...