Lesen und schreiben in einer Eingabeaufforderung den Befehl console mit VB.net
Ich habe eine ähnliche Frage woanders, aber vielleicht habe ich nicht bitten, es der richtige Weg, oder ich war nicht klar genug, also Frage ich wieder.
Dies ist, wo ich will:
- Öffnen Sie eine windows-Eingabeaufforderung
- Führen Sie eine DOS-Anwendung über einen dos-Befehl
- Lesen Sie den zurückgegebenen text, der angezeigt wird, in der dos-box und zeigen Sie Sie in einer text-box in meine windows form. Dieser muss in regelmäßigen Abständen wiederholt werden (sagen wir mal jede Sekunde) und das dos-Fenster nicht geschlossen werden soll.
Habe ich schon im Kreis, versucht den Prozess und die StartInfo-Befehle, aber Sie werden nur führen Sie die Anwendung und beenden Sie den Prozess sofort. Ich brauche, um die dos-box öffnen und Lesen zu halten, wird jeder neue text Hinzugefügt, um es von der dos-Anwendung. Auch ich kam in diesem thread zu beantworten scheint mein problem, aber es ist in C# und ich konnte nicht konvertieren:
Lesen Sie die Windows-Eingabeaufforderung STDOUT
Habe ich zu dem Teil, wo ich die Eingabeaufforderung öffnen und die Anwendung gestartet, aber ich weiß nicht, wie die Daten zu Lesen, dass es zurück an die dos-box Konsole hin und wieder. Ich will ständig auf änderungen zu überprüfen, so dass ich nach Ihnen zu handeln, vielleicht mit einem timer-Steuerelement.
Bitte helfen.
Dank!
Mir lief der code wurde freundlicherweise zur Verfügung gestellt von Stevedog und verwendet es wie folgt:
Private WithEvents _commandExecutor As New CommandExecutor()
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
_commandExecutor.Execute("c:\progra~2\zbar\bin\zbarcam.exe", "")
End Sub
Private Sub _commandExecutor_OutputRead(ByVal output As String) Handles _commandExecutor.OutputRead
txtResult.Text = output
End Sub
Aber alle bin ich immer leere dos-box. Die zbarcam Anwendung ordnungsgemäß ausgeführt wird, weil ich sehen kann, die Kamera Vorschau und ich kann auch sehen, es erkennen von QR-Codes, aber der text wird nicht angezeigt in der dos-box und _commandExecutor_OutputRead
sub wird nicht ausgelöst, wenn ich in der Nähe der DOS-box.
- Das code-snippet sollte ziemlich einfach zu konvertieren. Wenn Sie es nicht tun können, gibt es einige online-utilities, um zu helfen. Google c sharp vb-Konvertierung und es gibt viele Optionen. Und wenn Sie ein .net-Programmierer sind, sollten Sie sich bewusst sein, dass Sie die Fähigkeit haben, verwenden Sie code aus anderen Sprachen in der gleichen Lösung.
- Dank GrayFox374. Ja, ich hatte bereits versucht eine C# VB.Net Konverter, aber ich war immer ein Fehler in Zeile 1. Ich habe auch versucht, die Umwandlung, den code manuell (ich bin etwas vertraut mit C#) aber ich konnte nicht konvertiert werden ", proc.OutputDataReceived", da diese Eigenschaft scheint nicht zu existieren (es ist nicht einmal kommen mit intellisense).
- siehe meine Antwort für eine Umstellung auf VB.Net
- Brauchen Sie, Ihr Programm zu Holen, auf einem Konsolen-Fenster gestartet anderswo, oder ist es zulässig, für Ihr Programm, um die Konsole zu starten? Wenn letzteres und wenn dies wiederholt, ist es zulässig, für die Konsole-Fenster zu schließen, wenn Ihre app können Sie einfach öffnen Sie es erneut wieder?
- Ja, die Konsole ist geöffnet von meiner Anwendung, aber es kann geschlossen und geöffnet werden mehrfach seit der DOS-Anwendung dauert etwa 20 Sekunden mit der Arbeit zu beginnen. Die Anwendung in Frage ist zbarcam, die nach aufgerufen wird, in der DOS-Eingabeaufforderung öffnet sich ein weiteres Fenster mit einer Vorschau, was die webcam sieht, und starten Sie dann die Anzeige der dekodierten text des QR-codes innerhalb der ersten Eingabeaufforderung box. Ich brauche den text zu Lesen in der dos-box wird in regelmäßigen Abständen für alle neuen QR-codes entdeckt, die von der web-cam.
- Bitte klären: sind Sie eigentlich sprechen, über einen DOS (d.h., 8-bit, 10+ Jahre alt) Anwendung? Oder willst du nur, dass ein command-line-Anwendung? DOS-Anwendungen laufen in einer emulationsumgebung, die möglicherweise komplizieren die Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass C# - Beispiel ist schlecht, weil es nicht zeigen, wie Sie tatsächlich Lesen Sie den standard-Ausgabe-stream. Erstellen Sie eine Methode, wie diese:
Dann können Sie es so nennen:
Natürlich macht dies einen synchronen Aufruf. Wenn Sie es wollen, rufen Sie die Befehlszeile asynchron und nur ein Ereignis auszulösen, wenn es fertig ist, das ist auch möglich, würde aber erfordern ein wenig mehr Programmieren.
Wenn Sie wollen, es zu tun, asynchron und nur zu halten, sich regelmäßig für mehr Leistung auf einem festen Intervall, zum Beispiel, hier ist ein einfaches Beispiel:
Dann können Sie es wie folgt:
Object reference not set to an instance of an object
auf der LinieDim output As String = _output.ReadToEnd()
. Und wie bekomme ich die Ausgabe in ein Textfeld in meinem Hauptformular?System.NullReferenceException was unhandled by user code
Diese Wandler in der Regel nicht, wenn es um Veranstaltungen.
Eine direkte übersetzung des code würde wie folgt Aussehen:
proc.OutputDataReceived
ist nicht eine Eigenschaft, sondern eine event.Abonnieren die Veranstaltungen, die in
C#
Sie verwendenevent += handler
, während inVB.NET
Sie verwendenAddHandler event, AddressOf handler
.InterProcOutputHandler
scheint nicht zu feuern, wenn ein korrekter code erkannt wurde. Ich fühle, ich bin so nah an der Lösung, aber bin fehlt wohl eine Zeile code macht den Unterschied!