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