Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Подписка на свое событие


Автор: wester 25.9.2013, 15:35
Доброго времени суток. Написал свое событие, но вот подписаться на него не могу 

Код

//Downloader.cs
// DownloadCompleteEventArgs наследуется от EventArgs
 public delegate void DownloadCompleteHandler(object sender, DownloadCompleteEventArgs e);
        public event DownloadCompleteHandler OnDownloadComplete;

        protected void DownloadComplete(bool allowedContinue)
        {
            var handler = OnDownloadComplete;
            if (handler == null)
            {
                Debug.WriteLine("null eventHandler");
                return;
            }

            OnDownloadComplete(this, new DownloadCompleteEventArgs(allowedContinue));
        }

//Form1.cs
public MainWindow()
        {
            downloader=new Downloader();
            
            InitializeComponent();
// пытаюсь подписаться на событие
           downloader.OnDownloadComplete +=OnDownloadComplete1;
           }
 private void OnDownloadComplete1(object sender, DownloadCompleteEventArgs e)
        { //some code
     }
 

 Но в самом методе DownloadComplete(bool)  событие не вызывается, так как handler=null. 
Подскажите пожалуйста, где я ошибся


UPD Запутался в собственном коде. У меня в одном из методов на форме создавался новый экземпляр downloader, что и приводило к таким результатам. Тему помечаю решенной, и модераторы, будьте добры удалите её

Автор: jsharp36 25.9.2013, 19:00
А из кода ничего не ясно. Он вырван из другого класса.

Очевидно, если handler = null, то так оно и есть. Судя из этого кода, подписка идет в конструкторе MainWindow(), причем после отработки конструктора Downloader(). Значит, либо вы нигде не вызываете конструктор MainWindow(), т.е. не создаете объекта окна, либо вызываете метод
protected void DownloadComplete(bool allowedContinue)
из конструктора Downloader. Т.е. тогда, когда еще не было никакой подписки на события. А вообще, используйте режим Debug и точки останова - узнаете, как работает ваша программа и в какой очередности.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Подписка-на-свое-событие-id5242d8b2ae2015f31a000000#findElement_E7045_52430897ae2015aa61000093_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)