Как вызвать событие прямо в сабе в 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 обрабатывает это внутренне.