.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);
}