【问题标题】:Unusual code by the decompiler [closed]反编译器的异常代码[关闭]
【发布时间】:2013-05-15 03:30:00
【问题描述】:

我试图通过telerik反编译器反编译一个.cs文件,它把一个事件处理程序的代码变成了一个不寻常的代码。

private void Start_Click_1(object sender, RoutedEventArgs e)
{
    WindowsRuntimeMarshal.AddEventHandler<EventHandler<Object>>(new Func<EventHandler<Object>, EventRegistrationToken>(dispatcherTimer.add_Tick), new Action<EventRegistrationToken>(dispatcherTimer.remove_Tick), new EventHandler<Object>(this.timer_Tick));
}

private void timer_Tick(object sender, object e)
{
}

我不知道如何将其更改为正常。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 通过输入正确的代码?反编译器只会根据程序集的 IL 中的内容为您提供它所看到的内容,而这些内容不一定与最初编写的代码相对应。编译器可能会将您的原始源代码转换为其他内容。
  • 之前的代码是什么?编译器生成的代码有什么问题?

标签: c#


【解决方案1】:

seems 是随 Windows 运行时一起出现的新功能。也许你的反编译器无法处理。

关于上面链接的信息,您的代码应转换为:

private void Start_Click_1(object sender, RoutedEventArgs e)
{
  dispatcherTimer.Tick += timer_Tick;
}

private void timer_Tick(object sender, object e)
{
}

【讨论】:

  • 感谢您的替换。完美的工作!!!
【解决方案2】:

该行几乎可以肯定转换为:

this.dispatcherTimer.Tick += timer_Tick;

我这么说是因为它添加了一个事件处理程序AddEventHandler 并引用了dispatcherTimer.add_TickdispatcherTimer.remove_Tick,这几乎肯定是Tick 事件的添加和删除处理程序。

【讨论】:

  • 此代码抛出一个没有扩展方法的错误。但是这段代码 dispatcherTimer.Tick += timer_Tick; 工作正常。为什么?
  • @Mac,我不确定,但我更新了它以反映正确的代码。感谢您提供信息。
猜你喜欢
  • 2013-03-16
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多