C# 将事件添加到控件库的正确方法
我正在编写一个Winforms控件,它包装了一个JS库并扩展了一个web浏览器控件 当JS库调用一个事件时,我有一个对C#中一个方法的回调,该方法解析返回的JSON等。。。在该方法的末尾,我想触发一个事件,其中包含从JS返回的数据 我正在做以下工作:C# 将事件添加到控件库的正确方法,c#,C#,我正在编写一个Winforms控件,它包装了一个JS库并扩展了一个web浏览器控件 当JS库调用一个事件时,我有一个对C#中一个方法的回调,该方法解析返回的JSON等。。。在该方法的末尾,我想触发一个事件,其中包含从JS返回的数据 我正在做以下工作: public event EventHandler<WebMercatorCoordinates> OnMapClick; public void JavascriptCallbackReceiver(String message)
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));
}
公共事件事件处理程序onmaplick;
public void JavascriptCallbackReceiver(字符串消息)
{
//我在这里解析字符串
if(onmaplick!=null)
this.onmaclick(this,新的WebMercatorCoordinations(lat,lng));
}
我不喜欢那个空支票。如果用户没有将自己的处理程序添加到EventHandler onmaplick
,我必须检查它,以便不调用空委托
我是否应该在类的构造函数中向事件添加一个处理程序,使其永远不为null(对象将捕获自己的事件)?我也不喜欢那样(听起来更糟)
有没有更好的设计/编写方法?使用C#6可以编写:
OnMapClick?.Invoke(this, new WebMercatorCoordinates(lat, lng));
阅读事件上升的方式不是线程安全的(访问代码> OnMapClick <代码>两次,考虑使用局部变量或使用<代码>?调用C 6)调用< <代码>事件> <代码>比直接使用它更好,请考虑将事件提升代码放入<代码>保护OnEngult方法(不要在某些事情上命名事件
,例如使用MapClicked
)。您是否查看了code review
标记工具提示?是的,我已查看了工具提示:P我认为它不适合于code review SE,因为我知道它不太正确。非常感谢您的输入,我不知道这些指导原则!我已删除code review
标记,因为它不太受欢迎。