2014-09-25 54 views
0

我遇到了一个代码行中的问题,我修复了一个破坏的程序。我修复了大部分的问题,但这一行是给我一个问题:反编译破坏的VB程序问题

 new Thread(a0 => new VB$AnonymousDelegate_0(() => this.RunThreads())()).Start(); 

VB $ AnonymousDelegate_0似乎给人一种这个问题,但我不知道如何解决这个问题,从Java中的背景的。

+0

你能在编译/运行这段代码时显示错误吗? – rufanov 2014-09-25 02:28:50

+0

我收到多个错误:;预期,新的表达式需要(),[],{}类型,无效的表达式项),类型或名称空间名称VB无法找到。我觉得反编译器正在放入一个通用的对象名称,但我不确定要插入什么。 – Nader 2014-09-25 02:32:19

回答

0

C#中的反编译代码(不使用匿名委托)应该看起来像这样,但反编译器没有做好。

new Thread(new ParameterizedThreadStart(SomeMethod)).Start(); 

哪里的someMethod看起来像

public void SomeMethod(object o) 
{ 
    this.RunThreads(); 
} 

private void RunThreads() 
{ 
    //do actual work on new thread 
} 

由于没有参数,实际上是传递给新的线程,你不必使用ParameterizedThreadStart委托。编译代码可以很简单

new Thread(RunThreads).Start(); 
+0

就是这样。我想知道那里有什么汇编代码,并且认为这是处理线程的一种奇怪的方式。 – Nader 2014-09-25 03:03:13

+0

@rufanov是的......我试图在不使用lambda表达式的情况下编写代码,我认为它更容易理解,因为OP是C#语法的新手,当我在.NET 2.0中学习时,lambda对我来说是一种痛苦。 – kennyzx 2014-09-25 03:15:26

1

这不是VB.NET代码。这是C#代码。您的反编译器可能已损坏。这是怎样的代码看起来一样在VB.NET:

With New Thread(New ThreadStart(Sub() Me.RunThreads())) 
    .Start() 
End With 

因此,有创造新的线程,将调用当前类的RunThreads方法。线程立即由.Start()方法启动。

C#代码也有点不正确。它应该是这样的:

new Thread(() => this.RunThread()).Start();