2010-08-12 100 views
2

我试图给一个函数在C#转换为2008年VB.Net,似乎无法让Lambda表达式工作。该代码是从neat little C# SMTP server,节省邮件到Azure的Blob存储C#拉姆达到VB.Net

任何帮助将不胜感激拍摄。

public void Run() 
    { 
     var mutex = new ManualResetEvent(false); 
     while (true) 
     { 
      mutex.Reset(); 
      listener.BeginAcceptSocket((ar) => 
       { 
        mutex.Set(); 
        processor.ProcessConnection(listener.EndAcceptSocket(ar)); 
       }, null); 
      mutex.WaitOne(); 
     } 
    } 
+0

http://social.msdn.microsoft.com/Search/en-US/?Query=vb.net+lambda+expressions,尤其是[Lambda表达式(Visual Basic中)](http://msdn.microsoft。 com/en-us/library/bb531253.aspx) – 2010-08-12 02:59:38

+0

您使用的是.Net 4.0吗? – Gabe 2010-08-12 03:18:00

+0

我使用的.Net 3.5 SP1 – Anthony 2010-08-12 05:01:53

回答

1

我设法得到它使用InstantVB从有形的软件正确地转换为VB 2008

Public Sub Run() 
    Dim mutex = New ManualResetEvent(False) 
    Do 
     mutex.Reset() 
     listener.BeginAcceptSocket(Function(ar) AnonymousMethod1(ar, mutex), Nothing) 
     mutex.WaitOne() 
    Loop 
End Sub 

Private Function AnonymousMethod1(ByVal ar As Object, ByVal mutex As ManualResetEvent) As Object 
    mutex.Set() 
    processor.ProcessConnection(listener.EndAcceptSocket(ar)) 
    Return Nothing 
End Function 
1

lambda基本上只是一个匿名代理的简写。

所以更换

(ar)=> {//Do Stuff}

Sub(ar) 
'Do stuff 
End Sub 
+0

但它是在listener.BeginAcceptSocket输入参数,因此它不能是一个子。 – Anthony 2010-08-12 05:28:54

0

我推断你”在这种情况下,重新使用Visual Studio 2008你不能在VS2008中编写多行lambda表达式。

你必须使用VS2010,否则你将不得不使用Anthony's answer