来自Josh Smith的MVVM示例应用程序的EventHandler问题

时间:2010-09-21 04:07:26

标签: c# wpf mvvm event-handling

以下代码来自Josh Smith的MVVM示例:

/// <summary>
/// Raised when this workspace should be removed from the UI.
/// </summary>
public event EventHandler RequestClose;

void OnRequestClose()
{
    //if (RequestClose != null)
    //        RequestClose(this, EventArgs.Empty);
    EventHandler handler = this.RequestClose;
    if (handler != null)
        handler(this, EventArgs.Empty);
 }

评论的行是我的补充。我的问题是注释行与未注释的行做同样的事情吗?那么为什么要创建另一个EventHandler引用呢?或者我在这里遗漏了什么?感谢

3 个答案:

答案 0 :(得分:4)

Tanmoy是对的。这样做是为了防止在“if”之后但在“RequestClose()”之前的其他线程中更改RequestClose(例如为null)的可能性。

答案 1 :(得分:1)

没有区别 - 在这两种情况下,您都在使用相同的事件参考。我更喜欢您的评论代码。

享受!

答案 2 :(得分:1)

RequestClose可能被设置为null或另一个对象,可能是另一个线程,因为它是一个实例变量。将值分配给局部变量意味着您将始终具有对该事件的引用,并且其他线程无法更改该事件。希望这会有所帮助。