Я пытаюсь перенаправить вывод из xfoil.exe с загружаемыми файлами здесь . Проблема заключается в том, что когда я перенаправляю стандартный вывод, мой код не будет ничего читать, пока я не использую команду "quit", которая закрывает внешний файл xfoil.exe, и, следовательно, я не могу выполнять дальнейшие команды.
сначала определяя переменные
Dim p as process = New Process()
Dim startinfo = New ProcessStartInfo()
Dim bt As Threading.Thread
Я запускаю процесс, используя
With startinfo
.FileName = Application.StartupPath & "\appdata\xfoil.exe"
.Arguments = ""
.WorkingDirectory = Application.StartupPath
.RedirectStandardError = True
.RedirectStandardOutput = True
.RedirectStandardInput = True
.UseShellExecute = False
.CreateNoWindow = True
End With
p.StartInfo = startinfo
p.EnableRaisingEvents = True
If Not IsNothing(bt) Then bt.Abort()
bt = New Threading.Thread(AddressOf ReadThread)
bt.IsBackground = True
bt.Start()
p.Start()
Определение для ReadThread:
Private Sub ReadThread()
Dim rLine As String
Do Until Leaving
Try
rLine = p.StandardOutput.Read()
logtext += (Chr(rLine))
If p.StandardOutput.Peek = -1 Then
Me.Invoke(Sub() txtLog.AppendText(logtext))
logtext = ""
End If
Catch ex As Exception
Console.WriteLine("error " & ex.Message)
End Try
Loop
End Sub
Эта установка прекрасно работает с другим приложением от того же разработчика. Марк дрела. Когда я использую другое приложение AVL со ссылкой для скачивания здесь все работает нормально. Тем не менее, xfoil не работает с этой настройкой, и я потратил несколько часов на это без какой-либо удачи. Я использую VB. net в Windows 10 в Visual Studio. NET 2019 Community Edition.
Редактировать Оба метода используют Threading и события были реализованы и не повезло.
Пример кода с использованием обоих методов в VB. net - теперь доступен на Github для просмотра комментариев. Дайте мне знать, если у кого-то есть опыт с этим и может помочь. Это действительно помогло бы моим ученикам в классе!