#c# #wpf #visual-studio #caliburn.micro
Вопрос:
Моя проблема просто в том, что если я использую агрегатор событий Caliburn Micro и реализую интерфейс «IHandle», то это создает метод, называемый «HandleAsync(сообщение MyEvent, токен CancelleationToken)».
Моя проблема в том, что обычно эти методы не являются асинхронными и не нуждаются в пометке «асинхронность» или возврате задачи, поэтому на самом деле не должны иметь «Асинхронность» в конце, поскольку они не являются асинхронными методами, и вызывает предупреждение в Visual Studio.
Это не вызывает у меня никаких технических проблем, просто раздражает неправильное название методов, просто чтобы соблюдать интерфейс Caliburn Micro для методов подписки на агрегатор событий.
Простой вопрос заключается в том, как удалить асинхронность в конце имени метода или иным образом избавиться от этих предупреждений?
Спасибо
Гарри
Комментарии:
1. Как именно выглядит предупреждение?
2. Visual Studio предупреждает CS1998, в основном проблема со стилем, из-за которой у вас не должно быть «асинхронности» в конце имен методов для методов, которые не являются асинхронными, и многие методы агрегатора событий таковыми не являются, это простые вызовы для обновления списка или чего-то еще.
Ответ №1:
К сожалению, это невозможно при нынешней реализации EventAggregator
in Caliburn Micro.
Если бы вы проверили реализацию EventAggregator в репозитории github, вы бы заметили, что он ищет метод с определенным именем.
var interfaces = handler.GetType().GetTypeInfo().ImplementedInterfaces
.Where(x => x.GetTypeInfo().IsGenericType amp;amp; x.GetGenericTypeDefinition() == typeof(IHandle<>));
foreach (var @interface in interfaces)
{
var type = @interface.GetTypeInfo().GenericTypeArguments[0];
var method = @interface.GetRuntimeMethod("HandleAsync", new[] { type, typeof(CancellationToken) });
if (method != null)
{
_supportedHandlers[type] = method;
}
}
Одной из альтернатив было бы реализовать вашу собственную версию IEventAggregator
и ввести два интерфейса IHandle<T>
, а IHandleWithTask<T>
также представить синхронный и асинхронный варианты.
Комментарии:
1. Это то, чего я ожидал, возможно, здесь можно реализовать мой собственный вариант. Спасибо.
Ответ №2:
Вы должны быть в состоянии подавить предупреждение в своем исходном коде.
Щелкните правой кнопкой мыши на нем в списке ошибок и выберите Подавить->В источнике или Подавить->>В файле подавления в зависимости от того, куда вы хотите вставить директиву>> #pragma
.
Комментарии:
1. Спасибо, я надеялся найти способ действительно устранить проблему, а не подавлять предупреждение, на самом деле это просто одна из тех вещей, которые заводят меня, а не реальная техническая проблема.