首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试和更改执行步骤时的RaiseEvent

调试和更改执行步骤时的RaiseEvent
EN

Stack Overflow用户
提问于 2012-06-20 19:13:21
回答 1查看 563关注 0票数 0

我的应用程序中有以下代码

代码语言:javascript
复制
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,该事件不会触发。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 19:58:28

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

代码语言:javascript
复制
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#代码:

代码语言:javascript
复制
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);
        }
    }
}

当您使用Set Next statement调试器命令将执行点设置为第二个RaiseEvent语句时,调试器会将执行点移动到上面代码段中由HERE标记的语句。绕过临时变量的初始化。它仍然为空,因此不会引发该事件。在使用该命令之后,您可以通过使用Debug + Windows + Disassembly查看机器代码来观察到这种情况。

除此之外,这是任何C#程序员都非常熟悉的事件引发代码,他们没有raise事件访问器,所以必须编写以下代码:

代码语言:javascript
复制
var temp = Bar;
if (temp != null) {
    Bar(this, EventArgs.Empty);
}

嗯,调试器弄错了这一点,很容易看出它是如何发生的。以及它怎么会在没有被发现(或被忽视)的情况下持续这么长时间。解决办法很难找到,在RaiseEvent语句之前的语句可以工作,但非常不切实际。修改变量以使If语句执行所需事件是可能的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11118293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档