2010-10-06 36 views
0

我正在尝试更改事件参数中的值。不知道这是可能的,但是这是在父类中我目前的事件:如何返回一个事件的值(气泡值增加)?

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的参数。这显然不起作用,但我如何将这个值提升?

回答

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... 
} 

有一点要注意的这里是有有可能导致意想不到的结果场景:

  • 监听器可以选择生成一个线程和处理呼叫异步
  • 有可能是对数听众同一个事件,每个事件都可以分配一个不同的值。您的代码当然只会看到最后一个分配的代码,但您将无法控制侦听器的调用顺序。

就拿下面的情况(上述第1点):

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实例。