2010-08-12 13 views
2

J'essaye de convertir une fonction dans C# en VB.Net 2008 et ne peux pas sembler faire fonctionner l'expression de Lambda. Le code provient d'un neat little C# SMTP server qui enregistre des e-mails dans le stockage blob Azure.C# Lambda à VB.Net

Toute aide serait grandement appréciée.

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, en particulier [Lambda Expressions (Visual Basic)] (http://msdn.microsoft. com/fr-fr/library/bb531253.aspx) –

+0

Utilisez-vous .Net 4.0? – Gabe

+0

J'utilise .Net 3.5 SP1 – Anthony

Répondre

1

J'ai réussi à l'obtenir converti correctement pour VB 2008 en utilisant InstantVB du logiciel Tangible

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

Le lambda est simplement un raccourci pour un délégué anonyme.

donc remplacer le

(ar)=> {//Do Stuff}

avec

Sub(ar) 
'Do stuff 
End Sub 
+0

Mais c'est un paramètre d'entrée sur listener.BeginAcceptSocket donc il ne peut pas être un sous-marin. – Anthony

0

Je vous déduis » re à l'aide de Visual Studio 2008, auquel cas vous ne pouvez pas écrire des instructions multilambes lambda dans VS2008. Vous devrez utiliser VS2010 sinon vous devrez utiliser Anthony's answer.