Как вызвать событие прямо в сабе в vb.net

Я пытаюсь реализовать программу C# в VB.NET, и я застрял на точке. Я хотел бы получить точный эквивалент. Я не мог узнать, как передать событие в подпрограмму или функцию следующим образом. Так что часть, которую я не могу сделать в vb.net var mediaOpenedHandler = MediaOpened;, В VB вы не можете пропустить подобное событие. Если я напишу в VB: Dim mediaOpenedHandler = MediaOpened затем он говорит: "Public Event MediaOpened()" является событием и не может быть вызван напрямую. Используйте оператор "RaiseEvent", чтобы вызвать событие ". Так как я могу получить точно такой же результат. Заранее спасибо.

public abstract class MediaPlayerBase : WorkDispatcherObject
{
…
public event Action MediaOpened;
…
protected void InvokeMediaOpened()
    {
        var mediaOpenedHandler = MediaOpened;
        if (mediaOpenedHandler != null)
            mediaOpenedHandler();
    }
}

2 ответа

Решение

В верхней части моей головы, это буквально просто RaiseEvent mediaOpenedHandler()

Я нашел ответ сам здесь Соглашение о методе повышения обработчика событий. В общем, как ответил hermiod, вы просто используете RaiseEvent в VB. В C# они должны использовать это локальное назначение для этой цели: "В многопоточном приложении вы можете получить исключение нулевой ссылки, если вызывающая программа отменяет регистрацию в событии. Назначение локальной переменной защищает от этого". В VB RaiseEvent обрабатывает это внутренне.

Другие вопросы по тегам