У меня есть следующая проблема, и я надеюсь, что кто-то сможет мне помочь.Отмена фонового работника
У меня есть рабочий в VB .net (2010), который запускает shell-программу.
Программа оболочка представляет собой сервис и выход такие вещи, как:
Server initializing...
Server opening port...
more info...
Я могу «поймать» выход из оболочки и добавить его в текстовое поле (с использованием набора текста функции).
И я могу отменить рабочего, нажав на кнопку остановки, однако, когда больше нет вывода от оболочки, я больше не могу остановить рабочего.
По крайней мере, я подозреваю, что это так.
Я пробовал проверку для endofstream (комментарий), но это не работает.
Я также попытался использовать тот же код с некоторым тестовым текстом вместо «clsProcess.StandardOutput.ReadLine», и это также работает.
Итак, я пришел к выводу, что он должен иметь какое-то отношение к clsProcess.StandardOutput.ReadLine, находясь в конце ???
Try
clsProcess.StartInfo.UseShellExecute = False
clsProcess.StartInfo.RedirectStandardOutput = True
clsProcess.StartInfo.RedirectStandardError = True
clsProcess.StartInfo.FileName = serverpath + config_executable
clsProcess.StartInfo.CreateNoWindow = True
clsProcess.Start()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error starting server")
Debug.Print(ex.Message)
End Try
Do While Not workerServer.CancellationPending
Try
'If Not clsProcess.StandardOutput.EndOfStream Then
SetText(clsProcess.StandardOutput.ReadLine + vbNewLine)
'End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error adding line to log")
End Try
Threading.Thread.Sleep(100)
Loop
clsProcess.Kill()
Любые идеи?
Заранее благодарен!
С уважением,
PH
Можете ли вы опубликовать код в событии клика кнопки остановки? И любые соответствующие функции, которые может вызвать код? – overslacked