Основные события в VB - PullRequest
       18

Основные события в VB

4 голосов
/ 16 февраля 2010

Есть ли способ перевести этот код в VB? Большая часть этого проста, но я не могу найти способ переопределить обработчик событий.

public class MTObservableCollection<T> : ObservableCollection<T>
{

    public MTObservableCollection()
    {
        _DispatcherPriority = DispatcherPriority.DataBind;
    }
    public MTObservableCollection(DispatcherPriority dispatcherPriority)
    {
        _DispatcherPriority = dispatcherPriority;
    }
    private DispatcherPriority _DispatcherPriority;

    public override event NotifyCollectionChangedEventHandler CollectionChanged;
    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        var eh = CollectionChanged;
        if (eh != null)
        {
            Dispatcher dispatcher = (from NotifyCollectionChangedEventHandler nh in eh.GetInvocationList()
                                     let dpo = nh.Target as DispatcherObject
                                     where dpo != null
                                     select dpo.Dispatcher).FirstOrDefault();

            if (dispatcher != null && dispatcher.CheckAccess() == false)
            {
                dispatcher.Invoke(DispatcherPriority.DataBind, (Action)(() => OnCollectionChanged(e)));
            }
            else
            {
                foreach (NotifyCollectionChangedEventHandler nh in eh.GetInvocationList())
                    nh.Invoke(this, e);
            }
        }
    }

}

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Переписать Редактировать:

Разговор о том, что это snafu реализации компилятора, и предлагает обходные пути:

http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/ce30ceed-c260-4d99-b96d-5b7179466be8

Это мой (полу) окончательный ответ.

1 голос
/ 26 февраля 2010

Даже ошибка переопределять события в C #. В руководстве по программированию C # написано:

Не объявлять виртуальные события в базовый класс и переопределить их в производный класс. Компилятор C # делает не справиться с этим правильно в Microsoft Visual Studio 2008 и это непредсказуемо ли подписчик производное событие будет на самом деле подписка на событие базового класса.

Интересно, почему класс фреймворка нарушает это правило или даже почему компилятор это допускает.

...