[英]Unsubscribing events in case variable closure
我總是試圖盡可能取消訂閱事件。 如果發生變量關閉,我會執行以下操作 :
int someVar;
EventHandler moveCompleted = null;
moveCompleted = delegate(object sender, EventArgs e)
{
//...
//here is variable closure
someVar = 5;
//...
moveStoryboard.Completed -= moveCompleted;
};
moveStoryboard.Completed += moveCompleted;
但我不想使用匿名方法,我認為這不是好方法。 請給我一些建議或代碼示例。
提前致謝。
如果您不想使用匿名函數,則更容易:
moveStoryboard.Completed += HandleStoryboardCompleted;
...
private void HandleStoryboardCompleted(object sender, EventArgs e)
{
// Do stuff...
moveStoryboard.Completed -= HandleStoryboardCompleted;
}
這實際上會在每次調用方法時創建另一個EventHandler
實例,但由於該實例將等於用於訂閱的實例(具有相同目標的相同方法),因此可以用於取消訂閱。
怎么錯了:
class MyClass
{
public event EventHandler MyEvent;
public MyClass()
{
MyEvent += OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice;
}
protected void OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice(object sender, EventArgs e)
{
MyEvent -= OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.