将事件添加到控件库

时间:2016-02-18 13:15:44

标签: c#

我正在编写一个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(该对象将捕获自己的事件)?我也不喜欢(听起来更糟)。

有没有更好的方法来设计/支持这个?

1 个答案:

答案 0 :(得分:2)

使用C#6 null-conditional operator,您可以写:

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