Ce guide montre comment capturer et afficher le résultat d'une commande en temps réel à partir de CMD.exe
dans un contrôle Windows Forms.
Méthode : Le processus consiste à exécuter une commande et à gérer sa sortie ligne par ligne, en mettant à jour dynamiquement un contrôle de formulaire.
Étapes :
Définition de la commande : Spécifiez la commande et ses arguments. Ceux-ci seront transmis aux méthodes Exec.Run()
ou Exec.GetOutput()
.
Création d'un délégué : Un délégué est créé pour recevoir chaque ligne de commande sous forme de chaîne. Ce délégué agit comme une fonction de rappel.
Exécution de la commande : La commande est exécutée en utilisant soit Exec.Run()
(pour l'exécution en arrière-plan), soit Exec.GetOutput()
(pour récupérer l'intégralité de la sortie sous forme de chaîne). Surtout, Exec.Run()
nécessite le délégué comme paramètre pour gérer la sortie de streaming. Le paramètre noshow
dans Exec.Run()
doit être défini sur true
pour une exécution en arrière-plan.
Affichage de sortie : Dans la méthode du délégué :
txt.InvokeRequired
. Si true
, utilisez Invoke()
avec un MethodInvoker
pour mettre à jour la TextBox (txt
) en toute sécurité à partir du contexte de fil de discussion correct. Cela évite les exceptions entre threads.txt.InvokeRequired
est false
(ce qui signifie que le délégué est déjà sur le fil de discussion de l'interface utilisateur), mettez à jour le contrôle txt
directement.Exemple de code :
<code class="language-csharp">using Exec; using System.Windows.Forms; public partial class Form1 : Form { private void btnExecute_Click(object sender, EventArgs e) { // Access TextBox control (assuming it's named 'txtOutput') TextBox txt = txtOutput; // Replace txtOutput with your TextBox's name // Delegate to handle each line of output OutputHandler outputHandler = line => { if (txt.InvokeRequired) { txt.Invoke(new MethodInvoker(() => txt.AppendText(line))); } else { txt.AppendText(line); } }; // Execute command (replace with your command and path) Exec.Run(@"C:\Windows\System32\cmd.exe", "/c dir", null, outputHandler, true); // noshow = true for background execution } }</code>
Considérations importantes :
try-catch
blocs) pour gérer efficacement les exceptions potentielles lors de l'exécution de la commande.AppendText
est généralement plus efficace que l'attribution répétée à Text
.Cette explication améliorée fournit un guide plus concis et plus clair pour obtenir l'affichage du résultat des commandes en temps réel dans une application Windows Forms. N'oubliez pas de remplacer les noms d'espaces réservés (comme txtOutput
) par vos noms de contrôle réels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!