当我第一次输入输入(名称)时,消息不会显示名称。我必须再次按Enter键,消息才能显示为名称

时间:2019-06-21 11:00:48

标签: c# events delegates

using System;

public class NameChangeEventArgs : EventArgs
{
    public string Name { get; private set; }

    public NameChangeEventArgs(string name)
    {
        this.Name = name;
    }
}

public class Dispatcher
{
    private string _name;

    public string Name
    {
        get
        {
            return _name; 
        }
        set
        {
            OnNameChange(_name);

            _name = value; 
        } 
    }

    public event EventHandler<NameChangeEventArgs> NameChange;

    protected virtual void OnNameChange(string name)
    {
        NameChange?.Invoke(this, new NameChangeEventArgs(name));
    }
}

public class Handler
{
    public void OnDispatcherNameChange(object Source, NameChangeEventArgs args)
    {
        Console.WriteLine("Dispatcher's name changed to {0}", args.Name);
    } 
}

class Program
{
    static void Main(string[] args)
    {
        var dispatcher = new Dispatcher();
        var handler = new Handler();

        dispatcher.NameChange += handler.OnDispatcherNameChange;

        var name = "Sidd";
        dispatcher.Name = name;
    }
}

我的代码的目的是将Dispatcher的名称更改为传递给它的名称,但是在完成此操作的同时,引发了一个事件,以运行Handler类中的方法来显示将Dispatcher更改为的名称。

调用“ OnDispatcherNameChange(对象源,NameChangeEventArgs args)”以在我的调度员的设置器中显示消息“调度员的名称已更改为”。

但是,它输出的却是...

Dispatcher's name changed to

Press any key to continue... 

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为这是因为您在更改媒体资源之前要举报该事件。 接收事件的代码将读取旧名称,而不会注意到新名称。

尝试执行以下操作:

set
{
    // First change the property
    _name = value; 

    // Then raise the event
    OnNameChange(_name);
}