如何直接在vb.net中的sub中调用事件

时间:2011-05-28 15:34:13

标签: events c#-to-vb.net

我尝试在VB.NET中实现一个C#程序,但我坚持了一点。我想得到完全相同的。我无法通过以下方式找到如何将事件传递给子或函数。所以我在vb.net中无法做到的部分是var mediaOpenedHandler = MediaOpened;。在VB中,你无法传递这样的事件。如果我用VB编写:Dim mediaOpenedHandler = MediaOpened则说“'公共事件MediaOpened()'是一个事件,不能直接调用。使用'RaiseEvent'语句来引发一个事件。”那么我怎样才能得到完全相同的结果。提前谢谢。

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

2 个答案:

答案 0 :(得分:0)

在我的头顶,它实际上只是 RaiseEvent mediaOpenedHandler()

答案 1 :(得分:0)

我在这里找到了答案Event handler raising method convention。所以基本上hermiod回答你只是在VB中使用RaiseEvent。在C#中,他们必须为此目的使用此本地赋值:“在多线程应用程序中,如果调用者从事件中取消注册,则可以获得空引用异常。对局部变量的赋值可以防止这种情况发生。”在VB中,RaiseEvent在内部处理它。