2010-01-01 7 views
3

Hey, comment cela est écrit dans VB.NET? C'était un exemple que j'ai trouvé sur http://www.codeproject.com/KB/silverlight/SynchronousSilverlight.aspx.VB.NET - ThreadPool et déléguer en C# à VB.NET

ThreadPool.QueueUserWorkItem(delegate 
{ 
var channelFactory = new ChannelFactory<ISimpleService>("*"); 
var simpleService = channelFactory.CreateChannel(); 
var asyncResult = simpleService.BeginGetGreeting("Daniel", null, null); 
string greeting = null; 
try 
{ 
    greeting = simpleService.EndGetGreeting(asyncResult); 
} 
catch (Exception ex) 
{ 
    DisplayMessage(string.Format(
    "Unable to communicate with server. {0} {1}", 
    ex.Message, ex.StackTrace)); 
} 
DisplayGreeting(greeting); 
}); 

Répondre

3

Peut-être quelques erreurs de syntaxe, mais je suis sûr que vous pouvez les résoudre. vous pouvez faire une traduction littérale plutôt

ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GetGreeting)) 

Private Sub GetGreeting(o As Object) 
    Dim channelFactory = New ChannelFactory(Of ISimpleService)("*") 
    Dim simpleService = channelFactory.CreateChannel() 
    Dim asyncResult = simpleService.BeginGetGreeting("Daniel", Nothing, Nothing) 
    Dim greeting As String = Nothing 
    Begin Try 
     greeting = simpleService.EndGetGreeting(asyncResult) 
    Catch ex As Exception 
     DisplayMessage(String.Format("Unable to communicate with server. {0} {1}", ex.Message, ex.StackTrace)) 
    End Try 
    DisplayGreeting(greeting) 
End Sub 
+0

Merci! Je n'utilise pas cet exemple directement sur le projet de code :) C'était principalement WaitCallback() que je cherchais! – sv88erik

2

En VB10 (VS2010):

ThreadPool.QueueUserWorkItem(
      Sub() 
      Console.WriteLine("Hello") 
      End Sub) 

Et notez qu'il n'y a pas linecontinuations (_) nécessaires ici.

Mais vous voulez probablement cela pour VS2008 et vous devez ensuite séparer le délégué en tant que sous-fonction ou fonction séparée.

Sub Main() 
    ThreadPool.QueueUserWorkItem(AddressOf CallBack, "Hello") 
End Sub 

Sub CallBack(ByVal state As Object) 
    Console.WriteLine(state) 
End Sub 
+0

Il est vraiment dommage que vous n'épargniez presque aucune saisie lors de l'utilisation du délégué anonyme dans VB10. (J'adore qu'ils se soient débarrassés de ces fins ridicules.) – ChaosPandion

0

Fournir une petite explication des différences (autres de ont fourni de bons exemples de code):

VB.NET ne prend pas en charge les méthodes anonymes, qui sont pris en charge en C# en utilisant la syntaxe delegate {} pour définir une méthode en ligne. Pour convertir cette syntaxe en VB.NET, vous devez déplacer le contenu de la méthode inline anonyme dans une méthode normale, puis utiliser un délégué pointé vers la méthode extraite pour lancer l'appel. Lorsque les deux sont compilés, ils sont essentiellement les mêmes, car les méthodes anonymes en C# sont réellement anonymes dans leur état précompilé (le compilateur génère des noms pour les méthodes et les traite comme des méthodes de première classe).