Asp.net 为什么赢了';这个C#转换成VB吗?

Asp.net 为什么赢了';这个C#转换成VB吗?,asp.net,events,event-handling,Asp.net,Events,Event Handling,我正在尝试将下面的代码转换为我从中获取的VB(显然,我会将其应用到我自己的解决方案中) 但是我得到了一个错误:Public Event StatusChanged(发送方作为对象,e作为StatusChangedArgs)是一个事件,不能直接调用。使用“RaiseEvent”语句引发事件。如果我正确转换它,这没有意义,因为它是从MSDN中复制的,我认为MSDN是正确的,所以显然我做错了什么。有人有什么想法吗 谢谢 RaiseEvent StatusChanged(Me, e) 没有其他必要。在

我正在尝试将下面的代码转换为我从中获取的VB(显然,我会将其应用到我自己的解决方案中)

但是我得到了一个错误:
Public Event StatusChanged(发送方作为对象,e作为StatusChangedArgs)是一个事件,不能直接调用。使用“RaiseEvent”语句引发事件。
如果我正确转换它,这没有意义,因为它是从MSDN中复制的,我认为MSDN是正确的,所以显然我做错了什么。有人有什么想法吗

谢谢

RaiseEvent StatusChanged(Me, e)
没有其他必要。在VB.NET中,空检查是不必要的。这是由
RaiseEvent
内部完成的


对评论的答复: 在C#中,将委托保存在局部变量中以防止竞争条件。如果在C#中调用空委托,将得到
NullReferenceException
。为了防止它,您检查它以确保它不为null。如果您将其写为:

if (StatusChanged != null) { 
   // another thread might set `StatusChanged` to null at this point
   // causing the next line to fail.
   StatusChanged(this, e);
}
但是,由于VB在
RaiseEvent
中完成了所有这些工作,因此不必检查空值,因此也不必制作委托的本地副本

没有其他必要。在VB.NET中,空检查是不必要的。这是由
RaiseEvent
内部完成的


对评论的答复: 在C#中,将委托保存在局部变量中以防止竞争条件。如果在C#中调用空委托,将得到
NullReferenceException
。为了防止它,您检查它以确保它不为null。如果您将其写为:

if (StatusChanged != null) { 
   // another thread might set `StatusChanged` to null at this point
   // causing the next line to fail.
   StatusChanged(this, e);
}

然而,由于VB在
RaiseEvent
中完成了所有这些工作,因此不必检查空值,因此也不必制作委托的本地副本。

我也考虑过这一点,但为什么MS会说我需要创建一个临时变量?这是因为它被放在基类中吗?我也考虑过这个问题,但是为什么MS会说我需要创建一个临时变量呢?是因为它被放在基类中吗?
if (StatusChanged != null) { 
   // another thread might set `StatusChanged` to null at this point
   // causing the next line to fail.
   StatusChanged(this, e);
}