Когда я впервые ввожу ввод (имя), в сообщении не отображается имя. Я должен нажать Enter еще раз для отображения сообщения с именем - PullRequest
0 голосов
/ 21 июня 2019
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;
    }
}

Цель моего кода - изменить имя Диспетчера на имя, переданное ему, но пока это делается, вызывается событие для запуска метода в классе Handler для отображения имени, к которому имеет Диспетчер.был изменен на.

«OnDispatcherNameChange (объект Source, NameChangeEventArgs args)» вызывается для отображения сообщения «имя диспетчера изменено на» в установщике моего диспетчера.

Однако вместо этого выводится это...

Dispatcher's name changed to

Press any key to continue... 

Что я сделал не так?

1 Ответ

1 голос
/ 21 июня 2019

Я думаю, это потому, что вы поднимаете событие, прежде чем менять свойство. Код, который получает событие, прочитает старое имя и не заметит новое.

Попробуйте сделать это вместо:

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

    // Then raise the event
    OnNameChange(_name);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...