Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Task.Factory.StartNew(Sub()
Try
If CmdProcess Is Nothing Then
CmdProcess = New Process()
End If
CmdProcess.StartInfo.FileName = "cmd" ' 命令
'CmdProcess.StartInfo.Arguments = "" ' 参数
CmdProcess.StartInfo.CreateNoWindow = True ' 不创建新窗口
CmdProcess.StartInfo.UseShellExecute = False
CmdProcess.StartInfo.RedirectStandardInput = True ' 重定向输入
CmdProcess.StartInfo.RedirectStandardOutput = True ' 重定向标准输出
CmdProcess.StartInfo.RedirectStandardError = True
CmdProcess.StartInfo.RedirectStandardError = True ' 重定向错误输出
CmdProcess.Start()
CmdProcess.StandardInput.WriteLine("cd\")
CmdProcess.StandardInput.WriteLine("c:")
CmdProcess.StandardInput.WriteLine("cd " & Directorypath("ETH"))
CmdProcess.StandardInput.WriteLine("EthDcrMiner64.exe -epool eth.f2pool.com:8080 -ewal 0x73c94d5387c1ccb97ff9fdfeca0ec16af5aa96ad ")
While True
Dim hhh As String = CmdProcess.StandardOutput.ReadLine
Me.Invoke(Sub()
TextBox1.AppendText(hhh & vbLf)
End Sub)
End While
Catch ex As Exception
End Try
End Sub)
程序中被调用的外部程序在https://pan.baidu.com/s/1nxopIlz。谢谢
先单独执行下,看看有没有输出。加上CmdProcess.StartInfo.WorkingDirectory当前工作路径看看
我用ping来试的,没用你的矿机试,因为各种报毒。
你原来的代码是无法实时输出的,必须要等程序退出之后才有输出。要想获取实时输出需要通过事件实现。
你可以自己试一下矿机。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Task.Factory.StartNew(
Sub()
Try
If CmdProcess Is Nothing Then
CmdProcess = New Process()
End If
With CmdProcess.StartInfo
.FileName = "cmd" ' 命令
.CreateNoWindow = True ' 不创建新窗口
.UseShellExecute = False
.RedirectStandardInput = True ' 重定向输入
.RedirectStandardOutput = True ' 重定向标准输出
.RedirectStandardError = True ' 重定向错误输出
End With
CmdProcess.EnableRaisingEvents = True
AddHandler CmdProcess.OutputDataReceived, AddressOf Process_OutputDataReceived
AddHandler CmdProcess.ErrorDataReceived, AddressOf Process_OutputDataReceived
With CmdProcess
.Start()
CmdProcess.StandardInput.WriteLine("D:")
CmdProcess.StandardInput.WriteLine("cd " & Directorypath("ETH"))
CmdProcess.StandardInput.WriteLine("EthDcrMiner64.exe -epool eth.f2pool.com:8080 -ewal 0x73c94d5387c1ccb97ff9fdfeca0ec16af5aa96ad ")
.BeginOutputReadLine()
.WaitForExit()
End With
Catch ex As Exception
End Try
End Sub)
End Sub
Sub Process_OutputDataReceived(sender As Object, e As DataReceivedEventArgs)
Invoke(
Sub()
TextBox1.AppendText(e.Data & vbLf)
End Sub)
End Sub
路径问题,用cmd先试试看
你没发现你下面是个死循环吗?cpu都被你占用完了你的UI线程处于假死状态,既然你使用了invoke进行回调,那么应该开线程去处理,永远不要在UI线程里面使用 While True,如果必须使用一定要Sleep()一下。另外你在UI线程里面给输入框赋值的话根本不用Me.invoke,没有这个必要,没有跨线程调用直接给输入框赋值就可以了