Bonjour
Afin d'apprendre, il faut notamment savoir faire des recherches, sur internet, et pour cibler correctement ses recherches, il faut savoir dans quel langage on code.
application console en VB via Visual Studio
Donc, tu codes, en VB.Net, pas en VB Script. Et c'est important, car ces 2 langages sont très différents.
D'ailleurs, y'a pas de mode console en VB Script. Je vais donc déplacer ta question dans le bon forum
VBScript est proche de VB6 et VBA, donc des solutions trouvées dans ses 1 de ses 3 langages est souvent réutilisable dans un autre.
VB.Net, contrairement à ce que son nom laisse croire, ce n'est pas du VB, c'est du C# déguisé en VB.
Du coup, afin de bien coder en VB.Net, la première chose à faire est de supprimer la référence à Visual Basic et d'activer Option Strict et Option Explicit comme décrit à la fin de ce tutoriel https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net#conclusion
Et tu verras que MsgBox sera souligné en rouge, car ce n'est pas du .Net, mais du VB6.
Concernant ta question à proprement, c'est assez compliqué pour un débutant, parce que ReadLine est une méthode bloquante, c'est-à-dire que le thread qui va poser la question est arrêté jusqu'à ce qu'il y ait une réponse.
Il faut utiliser 2 threads (en plus du thread principal), un qui pose la question et attends indéfiniment une réponse et l'autre qui tue le premier au bout de 5 secondes.
Et le multithreading, ce n'est pas à la portée d'un débutant.
Du coup, je ne sais pas si ça t'es déjà accessible ou pas.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Voici la solution que j'ai trouvé pour répondre à mon problème, ce n'est peut-être pas très beau, mais ça marche.
Si vous avez des conseils / améliorations à proposer n'hésitez pas :)
Public ThreadLecture As New Threading.Thread(AddressOf Lecture) Public trame As String Sub Main() Dim path As String = "C:\Text.txt" ThreadLecture.Start() ' on lance la lecture ThreadLecture.Join(5000) 'on exécute la lecture pendant 5 secondes ThreadLecture.Abort() 'on arrête le thread If trame <> Nothing Then ' si l'utilisateur a écrit quelque chose durant les 5 secondes on l'enregistre dans un fichier texte ' Add text to the file. Dim info As Byte() = New UTF8Encoding(True).GetBytes(Now() & ErrorToString()) My.Computer.FileSystem.WriteAllText(path, trame, True) Else 'sinon on quitte le programme Environment.Exit(0)'on arrête tout le programme et ces threads End If End Sub Sub Lecture() trame = Console.ReadLine() End Sub
Juste, le
Environment.Exit(0)
Est inutile, car le fait de sortir de la fonction Main fait quitter le programme (si aucun thread n'est en cours, ce qui est le cas ici).
Hello,
en effet, j'ai raté ça ;).
PS pour la,coloration, il faut choisir Basic, VBScript ne marche pas.
ce n'est probablement pas la solution la plus "propre" mais ça le mérite de fonctionner.
Au contraire, c'est plutôt bien.
Quand je t'ai répondu, je n'ai pas pensé au timeOut de la méthode Join, c'est exactement ce qu'il te fallait.
Par contre, à tester, mais le timeOut doit générer un Abort, donc refaire Abort derrière me paraît inutile.
Il y a un moment que je n'ai plus utilisé les "thread de bases", je me sers des pool de thread à la place.
Il y a une excellente suite de tuto qui là https://fdorin.developpez.com/tutoriels/csharp/threadpool/part1/ sur le sujet
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
30 août 2022 à 14:45
Salut ! Merci pour ta réponse
Je ne sais pas pourquoi j'ai mis mon sujet dans VB.Script... Une erreur d'inattention surement ^^' Désolée et merci de l'avoir replacé dans le bon topic.
Je me suis renseignée un peu sur les threads et j'ai réussi à faire ce que je voulais, ce n'est probablement pas la solution la plus "propre" mais ça le mérite de fonctionner.
Merci pour ton aide et bonne continuations