我想起了一個問題。比方說,我想給一個變量theVar傳遞給下面C#將參數傳遞給事件處理程序
new EventHandler<AsyncCompletedEventArgs>(evHandler)
事件處理程序的聲明,並在下面的定義接受它:
public void evHandler(object sender, EventArgs e)
{
}
我該如何繼續?
我想起了一個問題。比方說,我想給一個變量theVar傳遞給下面C#將參數傳遞給事件處理程序
new EventHandler<AsyncCompletedEventArgs>(evHandler)
事件處理程序的聲明,並在下面的定義接受它:
public void evHandler(object sender, EventArgs e)
{
}
我該如何繼續?
如果你是編寫提高事件的代碼的人,那麼霍普金森先生在他的回答中非常好。您需要一個帶有屬性的自定義EventArgs來表示您希望傳遞的數據。
但是,如果您只是消耗事件而不是提高事件,那麼您的選擇就會受到更多限制。
由於您希望從事件中接收AsyncCompletedEventArgs,但您確實有一個選項:AsyncCompletedEventArgs的UserState指令。當您調用最終導致事件被觸發的異步方法時,這是一個屬性。它可以是您選擇的任何對象。您在調用async方法時提供它,並且在方法調用完成時,該事件會在事件參數屬性中將其返回給您。
不錯,我會記得那一個。雖然希望我會想知道當我開始TonysAsynchCompletedEventArgs課程時用戶的身份。 –
感謝這兩種方法。我會選擇這個答案,因爲這種情況在我的代碼中更普遍,即我只是消耗事件。 – Mika
定義EventArgs的後代
例如,
public class MySpecialEventArgs :EventArgs
{
public int theVar {get; private set;}
public MySpecialEventArgs(int argVar)
{
theVar = argVar;
}
}
然後,當你提高的情況下拋出上述之一,而不是EventArgs的
當你把你的處理程序Ë將是一個MySpecialEventArgs。
我同意這一點,但它假定你有控制代碼,提高事件。 –
@AnnL更多的是先決條件而不是假設。是否有一些令人討厭的黑客來避免它? –
這是您的事件處理程序(您是否正在調用處理程序)還是僅僅想使用具有現有事件的對象(「變量」)?也就是說,處理程序的簽名可能會更好,因爲['evHandler(object sender,AsyncCompletedEventArgs args)'](http://msdn.microsoft.com/zh-cn/library/db0etb8x.aspx)? – 2012-09-07 22:32:29
[傳遞給EventHandler的參數]的可能的重複(http://stackoverflow.com/questions/8644253/pass-parameter-to-eventhandler) – nawfal