Une Boucle While Fil
Alors j'ai essayé de créer un peu de code qui envoie des données sur une boucle while, plus précisément un vivant paquet à un serveur par l'intermédiaire d'un UdpClient.
static void doSend(string ip, int port)
{
while (isSending)
{
_sockMain = new UdpClient(ip, port);
//Code for datagram here, took it out
_sockMain.Send(arr_bData, arr_bData.Length);
}
}
Mais quand je l'appelle le "Stop" de la méthode, il est coincé dans une boucle et de ne pas en sortir. Comment puis-je mettre le tout en boucle dans un Thread? Donc, je peux interrompre le fil à l'arrêt, l'annulation de la boucle?
Si vous ne changez jamais la variable
Oui, lorsque j'appuie sur un bouton isSending = faux, Mais il n'a tout simplement pas de sortie.
Ensuite, le problème est peut être pas dans votre boucle, mais quelque part dans le code de datagramme.
vous avez besoin d'afficher plus de code, ce n'est pas suffisant
C'est peut-être, AmazingDreams... Et, je suis désolé, Alan...
isSending
, vous ne serez jamais sortir de boucleOui, lorsque j'appuie sur un bouton isSending = faux, Mais il n'a tout simplement pas de sortie.
Ensuite, le problème est peut être pas dans votre boucle, mais quelque part dans le code de datagramme.
vous avez besoin d'afficher plus de code, ce n'est pas suffisant
C'est peut-être, AmazingDreams... Et, je suis désolé, Alan...
OriginalL'auteur Daaksin | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
Il se bloque parce que votre doSend méthode fonctionne sur le thread de l'INTERFACE utilisateur. Vous pouvez utiliser quelque chose comme ci-dessous classe pour le faire fonctionner sur un sujet séparé, ou vous pouvez utiliser BackgroundWorkerClass
C'est affreux! volatile n'est pas mentionné dans la réponse.
sentez-vous libre pour modifier la réponse ou d'ajouter des explications...
OriginalL'auteur fofik
Vous pouvez utiliser le composant backgroundworker fil http://www.dotnetperls.com/backgroundworker
et à l'intérieur de dowork() mettez votre boucle while.
Vous pouvez arrêter le code à l'aide de CancelAsync() et set
backgroundWorker1.WorkerSupportsCancellation == true
WorkerSupportsCancellation
et vous avez pour vérifier laCancellationPending
au sein de votre boucle. Un exemple complet peut être trouvé à l'adresse MSDN.Cela pourrait fonctionner, grâce Varun.
OriginalL'auteur varun257
Également envisager de nommer vos méthodes de PascalCase, c'est à dire
DoSend
(mêmeStartSending
sera mieux),StopSending
.Parce que vous ne l'envoi dans une boucle. Après l'envoi terminé, le suivant ne se produira pas.
OriginalL'auteur Sergey Berezovskiy
Comment sur l'utilisation de
BREAK
déclaration?Veuillez consulter les liens msdn.microsoft.com/en-us/library/2aeyhxcd(v=vs. 71).aspx, dotnetperls.com/while. Instruction Break peut être utilisé pour mettre fin à la boucle while.
Je ne veux en sortir quand on clique sur un bouton, sinon il faut continuer?
Ensuite, de définir un événement de clic de bouton qui change une variable booléenne; isSending.
OriginalL'auteur TechDo