2014-09-25 48 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();