gpt4 book ai didi

vb.net - 控制台应用程序不想读取标准输入

转载 作者:行者123 更新时间:2023-12-02 01:57:48 25 4
gpt4 key购买 nike

我正在编写一个应用程序来管理其他控制台应用程序(游戏服务器 - jampded.exe)

当它在控​​制台中运行时,它可以毫无问题地写入数据和读取命令。

在我的应用程序中,我将标准 I/O 重定向到 StreamWriter 和 StreamReader

Public out As StreamReader
Public input As StreamWriter

Dim p As New Process()
p.StartInfo.FileName = My.Application.Info.DirectoryPath & "\" &
TextBox6.Text 'PATH TO JAMPDED.EXE
p.StartInfo.Arguments = TextBox1.Text 'EXTRA PARAMETERS
p.StartInfo.CreateNoWindow = True
p.StartInfo.RedirectStandardInput = True
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.UseShellExecute = False
p.Start()

input = p.StandardInput
out = p.StandardOutput

Dim thr As Thread = New Thread(AddressOf updatetextbox)
thr.IsBackground = True
thr.Start()

Sub updatetextbox()
While True
While Not out.EndOfStream
RichTextBox1.AppendText(out.ReadLine())
RichTextBox1.AppendText(vbNewLine)
End While
End While
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) _
Handles Button2.Click
input.WriteLine(TextBox4.Text)
TextBox4.Text = ""
input.Flush()
End Sub

当我按下应该从我的文本框中写入 STD/I 文本的 Button2 时,jampded.exe 就像它没有被写入一样。 Output 在启动时运行良好,之后当缓冲区中有大量数据时很少添加新行。

是我做错了什么,还是应用程序的错?

最佳答案

对于标准输入问题:

您确定您正在启动的应用程序正在从标准输入读取数据(而不是捕获键盘事件或其他东西)吗?要对此进行测试,请将一些您尝试发送到应用程序的文本放入一个文本文件(例如,命名为 commands.txt)。然后从命令提示符将其发送到应用程序,如下所示:

键入 commands.txt | jampded.exe

如果该应用程序读取这些命令,那么它确实是从标准输入读取的。如果不是,则重定向标准输入不会帮助您将数据获取到该应用程序。

对于标准输出问题:

与其启动您自己的线程来处理来自其他应用程序的数据,我建议您这样做:

AddHandler p.OutputDataReceived, AddressOf OutputData
p.Start()
p.BeginOutputReadLine()

Private Sub AddLineToTextBox(ByVal line As String)
RichTextBox1.AppendText(e.Data)
RichTextBox1.AppendText(vbNewLine)
End Sub
Private Delegate Sub AddLineDelegate(ByVal line As String)

Private Sub OutputData(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
If IsNothing(e.Data) Then Exit Sub
Dim d As AddLineDelegate
d = AddressOf AddLineToTextBox
Invoke(d, e.Data)
End Sub

Invoke 调用是必需的,因为 OutputData 可能会在不同的线程上被调用,并且 UI 更新都必须在 UI 线程上发生。

当直接从 StandardOutput 流中读取数据时,我看到了同样的问题,即数据成批传入。异步读取 + 事件处理程序组合修复了它。

关于vb.net - 控制台应用程序不想读取标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com