2010-08-12 3 views
2

Я пытаюсь преобразовать функцию в C# в VB.Net 2008 и, похоже, не может заставить выражение Lambda работать. Код берется из neat little C# SMTP server, который сохраняет электронные письма в хранилище Azure blob.C# Lambda to 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 Expressions (Visual Basic)] (http://msdn.microsoft. com/en-us/library/bb531253.aspx) –

+0

Вы используете .Net 4.0? – Gabe

+0

Я использую .Net 3.5 SP1 – Anthony

ответ

1

мне удалось получить его правильно преобразованы в VB 2008 с использованием InstantVB от Tangible Software

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

Лямбда - это просто сокращенная версия для анонимного делегата.

так заменить

(ar)=> {//Do Stuff}

с

Sub(ar) 
'Do stuff 
End Sub 
+0

Но это входной параметр в listener.BeginAcceptSocket, поэтому он не может быть sub. – Anthony

0

я заключаю тебя» повторное использование Visual Studio 2008 в этом случае вы не можете писать многострочные лямбда-выражения в VS2008.

Вам придется использовать VS2010, иначе вам нужно будет использовать Anthony's answer.