2010-04-14 5 views
1

Mon programme VB.NET WinForms (parent) appelle un autre programme de la console VB.NET (enfant) avec Process.Start(). L'application enfant s'exécute rapidement et j'aimerais qu'un message d'état soit renvoyé au parent. Comment puis-je envoyer une chaîne de l'enfant au parent?Envoyer une chaîne de l'application enfant au parent

Existe-t-il une méthode intégrée à cause de la relation parent-enfant ou dois-je utiliser d'autres interfaces comme des sockets?

Répondre

1

Juste pour ajouter du code à mon autre commentaire, imaginez le programme d'enfant simple:

Module Module1 
    Sub Main() 
     Console.WriteLine("This is a test") 
    End Sub 
End Module 

Et voici le parent:

Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim P As New Process() 
     P.StartInfo.FileName = "Child.exe" 
     P.StartInfo.RedirectStandardOutput = True 
     P.StartInfo.UseShellExecute = False 
     P.Start() 
     Dim T = P.StandardOutput.ReadToEnd() 
     'Do something with T 
    End Sub 
End Class 
1

Vous pouvez demander à votre application appelante d'envoyer des arguments de ligne de commande via Proccess.Start(), que votre application appelée utilise ensuite. En fonction de vos exigences/architecutre, il s'agit soit d'un bon design, soit d'un design simple; ou une idée terrible.

Je suppose que le premier; mais si c'est le dernier, je recommande fortement d'utiliser la WCF pour cela. Les appels de socket directs ont longtemps été la voie du dodo, sauf pour les applications de haut volume/performance comme les jeux vidéo. Et avec le WCF, vous pouvez demander à un client d'envoyer ses données d'application serveur dans très peu de lignes de code.

Quelles sont vos exigences ici? Les messages seront-ils envoyés fréquemment ou juste au début? Combien de fois que se produisent?

+0

J'ai besoin du programme enfant d'accepter simplement une ligne de commande argument, charger un fichier, renvoyer un message récapitulatif et quitter. La seule partie que je ne peux pas comprendre est "envoyer un message récapitulatif". Le programme pour enfants ne prendrait probablement pas plus d'une demi-seconde à compléter. – Steven

+0

Dans ce cas, demandez à votre parent d'appeler Process.Start et demandez à l'enfant d'écrire dans StandardOutput/StandardError. Vous pouvez les lire dans le parent en redirigeant ces appels. http://stackoverflow.com/questions/206323/how-to-execute-command-line-in-c-get-std-out-results –

+0

Cela ressemble à mon hypothèse était juste. Vous ne voulez pas vous lancer dans l'utilisation d'arguments de ligne de commande pour IPC pour cela. Je recommande fortement d'utiliser la WCF; c'est * très * haut niveau, essayez de taper 'WCF Tutorial' dans google. Voici un lien que j'ai brièvement parcouru et qui m'a semblé direct: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication – dferraro