作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用户控件,它在与 Web 服务通信后引发事件。父级在引发时处理此事件。我认为正确的方法是将从网络服务返回的对象作为 eventargs 传递给父级???
如果这是正确的方法,我似乎无法找到有关如何执行此操作的说明。
UserControl
public event EventHandler LoginCompleted;
if (this.LoginCompleted != null)
{
this.LoginCompleted(this, new EventArgs() //this is where I would attach / pass my biz object no?);
}
Parent
ctrl_Login.LoginCompleted += ctrl_Login_LoginCompleted;
....snip....
void ctrl_Login_LoginCompleted(object sender, EventArgs e)
{
//get my object returned by login
}
最佳答案
您必须使用 EventHandler<T>
声明您的事件哪里T
是您的类派生自 EventArgs
:
public event EventHandler<LoginCompletedEventArgs> LoginCompleted;
LoginCompletedEventArgs
看起来像这样:
public class LoginCompletedEventArgs : EventArgs
{
private readonly YourBusinessObject _businessObject;
public LoginCompletedEventArgs(YourBusinessObject businessObject)
{
_businessObject = businessObject;
}
public YourBusinessObject BusinessObject
{
get { return _businessObject; }
}
}
private void RaiseLoginCompleted(YourBusinessObject businessObject)
{
var handler = LoginCompleted;
if(handler == null)
return;
handler(this, new LoginCompletedEventArgs(businessObject));
}
RaiseLoginCompleted
.这是引发事件的线程安全版本。我消除了一个可能的
NullReferenceException
这可能发生在一个线程想要引发事件而另一个线程取消订阅
if
之后的最后一个处理程序的竞争条件场景中。检查但在实际调用处理程序之前。
关于c# - 如何在 EventArgs 中传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14977927/
我是一名优秀的程序员,十分优秀!