J'ai le problème suivant et j'espère que quelqu'un pourra m'aider avec.Annulation de background-worker
J'ai un travailleur dans VB .net (2010) qui exécute un programme shell.
Le programme shell est un service et d'autres choses comme la sortie:
Server initializing...
Server opening port...
more info...
Je suis en mesure de « attraper » la sortie de la coquille et l'ajouter à une zone de texte (en utilisant la fonction de texte défini).
Et je suis en mesure d'annuler le travailleur en cliquant sur un bouton d'arrêt, mais quand il n'y a plus de sortie par le shell, je ne peux plus arrêter le travailleur.
Au moins, je pense que c'est le cas.
J'ai essayé de vérifier pour endofstream (section commentée) mais cela ne fonctionne pas.
J'ai également essayé de faire du même code avec du texte de test au lieu de 'clsProcess.StandardOutput.ReadLine' et cela fonctionne également.
Donc je suis arrivé à la conclusion qu'il doit avoir quelque chose à voir avec clsProcess.StandardOutput.ReadLine étant à la fin ???
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()
Des idées?
Merci d'avance!
Cordialement,
PH
Pouvez-vous publier le code dans l'événement click de votre bouton d'arrêt? Et toutes les fonctions pertinentes que le code peut appeler? – overslacked