0
该代码用于使用VB.NET运行CMD。我想要做的是,当我输入“ipconfig”并单击ExecuteButton时,将出现大量文本,其中一个单词将是“DNS”。当OutputTextBox中出现“DNS”这个词时,我希望StatusTextBox显示文本“It Works”。如何从一个文本框显示文本到另一个
下面是代码:
Public Class Form1
Private WithEvents MyProcess As Process
Private Delegate Sub AppendOutputTextDelegate(ByVal text As String)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.AcceptButton = ExecuteButton
MyProcess = New Process
With MyProcess.StartInfo
.FileName = "CMD.EXE"
.UseShellExecute = False
.CreateNoWindow = True
.RedirectStandardInput = True
.RedirectStandardOutput = True
.RedirectStandardError = True
End With
MyProcess.Start()
MyProcess.BeginErrorReadLine()
MyProcess.BeginOutputReadLine()
AppendOutputText("Process Started at: " & MyProcess.StartTime.ToString)
If OutputTextBox.Text = "DNS" Then
StatusTextBox.Text = "It Works"
End If
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
MyProcess.StandardInput.WriteLine("EXIT")
MyProcess.StandardInput.Flush()
MyProcess.Close()
End Sub
Private Sub MyProcess_ErrorDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles MyProcess.ErrorDataReceived
AppendOutputText(vbCrLf & "Error: " & e.Data)
End Sub
Private Sub MyProcess_OutputDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles MyProcess.OutputDataReceived
AppendOutputText(vbCrLf & e.Data)
End Sub
Private Sub ExecuteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExecuteButton.Click
MyProcess.StandardInput.WriteLine(InputTextBox.Text)
MyProcess.StandardInput.Flush()
InputTextBox.Text = ""
End Sub
Private Sub AppendOutputText(ByVal text As String)
If OutputTextBox.InvokeRequired Then
Dim myDelegate As New AppendOutputTextDelegate(AddressOf AppendOutputText)
Me.Invoke(myDelegate, text)
Else
OutputTextBox.AppendText(text)
End If
End Sub
End Class
这里是什么样子的例子:
要指出我的问题,这里是我尝试做:
If OutputTextBox.Text = "DNS" Then
StatusTextBox.Text = "It Works"
End If
当我输入“ipconfig”时,将显示文本“DNS”,但不显示StatusTextBox发生了一件事情。我究竟做错了什么?
是的,你说得对,我要检查它是否包含“DNS”,然后有“这作品”在StatusTextBox显示。 你的意思是像下面那样吗?它不适合我。 私人小组MyProcess_OutputDataReceived(BYVAL发件人为对象,BYVALË作为System.Diagnostics.DataReceivedEventArgs)把手MyProcess.OutputDataReceived AppendOutputText(vbCrLf&e.Data) 如果e.Data.Contains( “DNS”)然后 StatusTextBox.Text =“它工作的” 结束如果 结束小组 – luoxiansheng
通过“它没有为我工作”你的意思是你得到一个错误约一个跨线程操作?您需要创建一个用于访问UI的委托,就像您更改输出文本框一样。我在上面添加了一些代码。 – Capellan
对不起,我的短暂没有工作的答案,我应该早些时候更详细。但是,你是非常正确的,这是我收到的错误。代表确实解决了这个问题。非常感谢! :) – luoxiansheng