Как вызвать событие прямо в сабе в vb.net - PullRequest
0 голосов
/ 28 мая 2011

Я пытаюсь реализовать программу на 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 ]

0 голосов
/ 29 мая 2011

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

0 голосов
/ 28 мая 2011

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

...