我正在尝试更改事件参数中的值。不确定这是否可行,但这是我在父类中的当前事件:
public void MasterClass()
{
void btnSubmit_Click(object sender, EventArgs e)
{
...
OnInputBound(this, new InputEventArgs(postName, value));
//I would like to try something like this but does not work:
//value = OnInputBound(this, new InputEventArgs(postName, value));
//Continue with new value...
}
}
在应用程序的其他部分,他们通常会像这样注册事件:
protected override void CreateChildControls()
{
MyForm.OnInputBound += new EventHandler<InputEventArgs>(MyForm_OnInputBound);
}
void MyForm_OnInputBound(object sender, SingleForm.InputEventArgs e)
{
e.Value = "new value";
}
注意我是如何尝试更改MasterClass的参数。这显然不起作用,但我怎么会冒这个值呢?
答案 0 :(得分:1)
您需要保留对InputEventArgs
实例的引用,以便在事件发生后可以从中读取Value
:
void btnSubmit_Click(object sender, EventArgs e)
{
...
InputEventArgs eventArgs = new InputEventArgs(postName, value);
OnInputBound(this, eventArgs);
value = eventArgs.Value;
//Continue with new value...
}
有一点需要注意的是,有些情况可能导致意外结果:
以下列情况为例(上面的第一点):
void MyForm_OnInputBound(object sender, SingleForm.InputEventArgs e)
{
ThreadPool.QueueUserWorkItem(state =>
{
// perform some potentially lengthy database lookup or such
// and then assign a new value
e.Value = "new value";
});
}
在这种情况下,无法保证在btnSubmit_Click
中的代码从InputEventArgs
实例中获取“新”值之前已分配该值。