Пользовательский обработчик событий C # всегда возвращает ноль - PullRequest
0 голосов
/ 11 октября 2018

Я создаю симулятор автомобиля, в котором у меня есть ключ, который включает двигатель.Механизм связан с определенным ключом с помощью метода обратного вызова, который вызывает метод OnEngineTurn, который вызывает событие.Неважно, что я делаю с EventHandler, у меня оно никогда не работает, потому что оно всегда равно нулю.Вот код ниже.Я относительно новичок в C #, поэтому любая помощь приветствуется

public delegate void MyEventHandler(object sender, EventArgs e);

class Engine
{
    public event MyEventHandler EngineTurn;

    //raise the event
    protected virtual void OnEngineTurn(EngineEventArgs e)
    {
         MyEventHandler engineTurn = EngineTurn;

        if (engineTurn != null)
        {
            MessageBox.Show("Hello World");
            engineTurn(this, e);
        }
        else
        {
            MessageBox.Show("Null");
        }
    }

    public CarKey GetNewKey()
    {
        return new CarKey(new KeyCallBack(OnEngineTurn));
    }
}

class EngineEventArgs : EventArgs
{
     public string name { get; set; }

}

delegate void KeyCallBack(EngineEventArgs e);

class CarKey
{
    //we need a way to hook the engine up to the car so we don't crank, but one car with one key
    private KeyCallBack keyCallBack;

    public CarKey(KeyCallBack callBackDelegate)
    {
        this.keyCallBack = new KeyCallBack(callBackDelegate);
    }

    public void TurnTheKey(EngineEventArgs e)
    {
        if (keyCallBack != null)
        {
            MessageBox.Show("A");
            keyCallBack(e);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

решена проблема

class Simulator
{
    private Engine engine = new Engine();
    private Transmission transmission;
    CarKey carKey;

    //public ObservableCollection<string> FanSays { get { return fan.FanSays; } }
    //public ObservableCollection<string> PitcherSays { get { return pitcher.PitcherSays; } }
   // public int Trajectory { get; set; }
    //public int Distance { get; set; }

    public Simulator()
    {
        transmission = new Transmission(engine);
        carKey = engine.GetNewKey();
    }

    public async void StartSimulator()
    {
        EngineEventArgs engineEventArgs = new EngineEventArgs("America!");
        await new MessageDialog("made it inside the start method").ShowAsync();

        carKey.StartTheEngine(engineEventArgs);
    }
}
0 голосов
/ 12 октября 2018

carKey = engine1.GetNewKey () должен привязывать определенный ключ к определенному движку с помощью метода обратного вызова, который вызывает событие EngineTurn .... carKey.TurnTheKey (engineEventArgs) должен вызывать событие ....Ниже приведен конструктор для CarKey ... У меня он внутри класса Engine для метода обратного вызова ...

    carKey = engine1.GetNewKey(); 
    engineEventArgs = new EngineEventArgs();
    carKey.TurnTheKey(engineEventArgs); 

    public CarKey GetNewKey() 
    {
         return new CarKey(new KeyCallBack(OnEngineTurn));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...