Assez nouveau en C# (et je me décrirais comme un débutant en programmation, mais je suis ambitieux), donc c'est probablement quelque chose de très simple à résoudre.Passer les données d'événement retournées
J'ai une fonction appelée se dans un commutateur comme celui-ci:
case "PERL_TEST":
FileInfo fi = new FileInfo("hello.txt");
mainproc.process_file(fi);
MessageBox.Show(perl_o);
break;
Le mainproc.process est une fonction qui appelle Perl comme ceci:
myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl.exe");
myProcessStartInfo.Arguments = "perly.pl";
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcessStartInfo.CreateNoWindow = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.OutputDataReceived += new DataReceivedEventHandler(Perl_Output);
myProcess.Start();
myProcess.BeginOutputReadLine();
La fonction Perl_Output contient rien dans ce , mais reçoit les arguments: object o et DataReceivedEventArgs e.
Quelle méthode serait la meilleure pour renvoyer e.Data à afficher dans la boîte à messages à partir du commutateur d'origine (perl_o)? Je ne suis pas sûr de savoir comment faire ça. Je ne suis même pas sûr si j'ai la méthode la plus efficace pour appeler Perl en externe. L'application entière est basée sur l'appel externe de perl, et le retour des données. La partie qui appelle perl est déjà en cours d'exécution sur un deuxième thread. Toute aide serait appréciée car je suis un débutant ... soyez gentil :)
Editer: e.Data n'est pas déclaré. Il est passé lorsque l'événement Perl_Output est appelé. Le commutateur est pour les commandes réseau de base, dans ce cas: "PERL_TEST".
perl_o n'est pas déclaré. Je cherche un moyen de faire perl_o = e.Data APRES mainproc.process_file termine son processus. La meilleure façon générale pour moi serait si je pouvais déclarer la fonction contenant myProcess comme une chaîne (au lieu de void), avoir la fonction d'attendre que le processus se termine, puis retourner la sortie du processus.
Que vérifie le commutateur? –
Je pense que vous avez enlevé un peu trop de votre code. Je ne vois pas perl_o ou e.Data déclaré ou passé dans vos extraits ... d'où viennent-ils? Comment arrivent-ils là? Montrer toutes vos méthodes vous aidera. –