繁体   English   中英

将事件添加到控件库的正确方法

[英]Proper way to add event to control library

我正在编写Winforms控件,该控件包装了JS库并扩展了Web浏览器控件。

当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 ,则必须进行检查,以免调用空委托。

我是否应该在类的构造函数中向事件添加处理程序,以使其永远不会为null(对象将捕获其自己的事件)? 我也不喜欢(听起来更糟)。

有没有更好的方法来设计/写这个呢?

使用C#6 空条件运算符,您可以编写:

OnMapClick?.Invoke(this, new WebMercatorCoordinates(lat, lng));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM