2016-02-18 3 views
1

Я пишу элемент управления 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.

Должен ли я, в конструкторе класса, добавить обработчик события, чтобы он никогда не был нулевым (объект поймает собственное событие)? Мне тоже это не нравится (звучит намного хуже).

Есть ли какой-нибудь лучший способ спроектировать/сделать это?

+2

читать [принципы] (https://msdn.microsoft.com/library/ms229011 (v = VS.100) .aspx). Ваш способ повышения событий не является потокобезопасным (дважды обращаясь к «OnMapClick», используйте локальную переменную или используйте синтаксис '.Invoke' от C# 6.0), лучше наследовать параметр делегата из' EventArgs', чем использовать его напрямую, подумайте о том, чтобы положить код возраста в код 'protected OnEvent' (и не называть событие' OnSomething', используйте, например, 'MapClicked'). Вы проверили «подсказку тега-кода» tooltip btw? – Sinatr

+0

Да, я проверил всплывающую подсказку: P Я полагал, что это не подходит для проверки кода SE, так как я знаю, что это не совсем правильно. Большое спасибо за вход, я не знал об этих рекомендациях! –

+0

Я удалил тег 'code-review', так как он не очень приветствуется. –

ответ

Смежные вопросы