.net 调试和更改执行步骤时引发事件

.net 调试和更改执行步骤时引发事件,.net,vb.net,events,.net,Vb.net,Events,我的应用程序中有此代码 If _oCurrentCall.CustomData.Length > 0 AndAlso UsageType = UsageTypeEnum.Vanlig Then RaiseEvent NewIncomingCallWithCustomData(_oCurrentCall) ElseIf UsageType = UsageTypeEnum.Sentralbord Then RaiseEvent NewIncomingCall(_oCurrentCall

我的应用程序中有此代码

If _oCurrentCall.CustomData.Length > 0 AndAlso UsageType = UsageTypeEnum.Vanlig Then
  RaiseEvent NewIncomingCallWithCustomData(_oCurrentCall)
ElseIf UsageType = UsageTypeEnum.Sentralbord Then
  RaiseEvent NewIncomingCall(_oCurrentCall, Queues)
End If
在没有调试的情况下,事件会正常引发并正常工作。 但是,当调试并尝试更改执行步骤(如将执行步骤拖动到其他条件块中的raiseevent)时,不会触发事件


我做错了什么?

我责备你。可以说,这是调试器中的一个bug,在我看来很难修复。将代码从vb.net反编译到C#时,更容易看到。此示例代码:

Class Test
    Public Event Foo As EventHandler
    Public Event Bar As EventHandler

    Public Sub Run(ByVal arg As Integer)
        If arg = 0 Then
            RaiseEvent Foo(Me, EventArgs.Empty)
        Else
            RaiseEvent Bar(Me, EventArgs.Empty)
        End If
    End Sub
End Class
转换为等效的C#代码:

好吧,调试器在这方面做得很糟糕,很容易看出它是如何发生的。以及它是如何在如此长的时间内未被发现(或忽视)的。解决方法很难找到,RaiseEvent语句之前的语句可以工作,但非常不切实际。修改变量,使If语句能够执行所需的事件


我在connect.microsoft.com的反馈文章中报告了这个问题。不要期待奇迹。

你好,阿德里亚诺。我在调试模式下编译哇,谢谢汉斯。你是说这个bug在c#语法中不存在吗?对,在c#中设置断点没有问题,因为代码中有一条语句。
var-temp=Bar语句。
public void Run(int arg)
{
    EventHandler VB$t_ref$S0;
    if (arg == 0)
    {
        VB$t_ref$S0 = this.FooEvent;
        if (VB$t_ref$S0 != null)
        {
            VB$t_ref$S0(this, EventArgs.Empty);
        }
    }
    else
    {
        VB$t_ref$S0 = this.BarEvent;
        if (VB$t_ref$S0 != null)              // <=== HERE!!!
        {
            VB$t_ref$S0(this, EventArgs.Empty);
        }
    }
}
var temp = Bar;
if (temp != null) {
    Bar(this, EventArgs.Empty);
}