Я пишу элемент управления Winforms, который обертывает библиотеку JS и расширяет управление веб-браузером.Правильный способ добавления события в библиотеку управления
Когда JS-библиотека вызывает событие, у меня есть обратный вызов метода на C#, который анализирует возвращаемый JSON и т. Д. В конце этого метода я хочу запустить событие с данными, возвращаемыми из JS.
Я делаю следующее:
public event EventHandler<WebMercatorCoordinates> OnMapClick;
public void JavascriptCallbackReceiver(String message)
{
//I'm parsing the string here
if (OnMapClick != null)
this.OnMapClick(this, new WebMercatorCoordinates(lat, lng));
}
мне не нравится, что проверка нулевой. Я должен проверить его, чтобы не вызвать нулевой делегат, если пользователь не добавил свой собственный обработчик к EventHandler<WebMercatorCoordinates> OnMapClick
.
Должен ли я, в конструкторе класса, добавить обработчик события, чтобы он никогда не был нулевым (объект поймает собственное событие)? Мне тоже это не нравится (звучит намного хуже).
Есть ли какой-нибудь лучший способ спроектировать/сделать это?
читать [принципы] (https://msdn.microsoft.com/library/ms229011 (v = VS.100) .aspx). Ваш способ повышения событий не является потокобезопасным (дважды обращаясь к «OnMapClick», используйте локальную переменную или используйте синтаксис '.Invoke' от C# 6.0), лучше наследовать параметр делегата из' EventArgs', чем использовать его напрямую, подумайте о том, чтобы положить код возраста в код 'protected OnEvent' (и не называть событие' OnSomething', используйте, например, 'MapClicked'). Вы проверили «подсказку тега-кода» tooltip btw? – Sinatr
Да, я проверил всплывающую подсказку: P Я полагал, что это не подходит для проверки кода SE, так как я знаю, что это не совсем правильно. Большое спасибо за вход, я не знал об этих рекомендациях! –
Я удалил тег 'code-review', так как он не очень приветствуется. –