在使用 AsyncOperation 将我的事件编组到 UI 上下文之后,我必须创建我的 OnEventName 方法到 OnEventNameAsync 版本的副本。我惊讶地发现我可以用以下两种方法替换我的所有 OnEventName 方法:
private void OnRaiseEvent<T>(EventHandler<T> instance, object sender, T e) where T : EventArgs
{
if (this._calling_context != null)
{
this._calling_context.Post(this.OnRaiseEventAsync<T>, new object[] { instance, sender, e });
}
}
private void OnRaiseEventAsync<T>(object state) where T : EventArgs
{
object[] array = state as object[];
if (array != null && array.Length == 3)
{
EventHandler<T> instance = array[0] as EventHandler<T>;
object sender = array[1];
T e = array[2] as T;
if (instance != null && sender != null && e != null)
{
instance(sender, e);
}
}
}
通过调用引发事件:
this.OnRaiseEvent(this.EventName, this, EventArgs.Empty);
现在,每次我的应用程序引发事件时,我的应用程序都必须创建一个 SendOrPostCallback 委托的新实例,而且有很多。我的问题是,如果我保持这种设计模型,这是否会导致性能问题?在测试中,我没有注意到性能有任何下降,但想问问专家......