2016-12-13 1 views
0

J'essaie d'utiliser un thread d'arrière-plan dans mon application C# WebForm (ce n'est PAS un problème de Windows Form). Le thread surveille une connexion TCP/IP à la recherche de données à afficher du côté réception. Lorsque les données apparaissent, je veux l'écrire dans une zone de texte sur ma page Web. Le problème est que lorsque j'essaie d'écrire dans la zone de texte à partir de ce fil, rien n'est réellement écrit dans la zone de texte, puis la page Web se charge. Je sais que c'est un problème croisé et non un problème de chargement de page.Transférer des données d'un thread d'arrière-plan dans une zone de texte sur une page Web

Mon programme attend que les données soient écrites dans une "zone de texte" avant de rendre la page Web. J'ai essayé d'utiliser un délégué, mais cela n'a pas fonctionné. J'ai également cherché une solution, mais la plupart des réponses traitent Windows Forms et WebForms semblent agir différemment.

Pour mon application C# WebForm, comment puis-je accéder aux données créées dans un thread d'arrière-plan pour pouvoir les charger dans une zone de texte sur ma page Web?

Thread ipThread; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ipThread = new Thread(() => ipSocketRcv(); 
    ipThread.IsBackground = true; 
    ipThread.Priority = ThreadPriority.BelowNormal; 
    ipThread.Start(); 
} 

void ipSocketRcv() 
{ 
    while (true) 
    { 
    if receive data... 
     myTextBox.Text = data; **//This does not work** 
     finished = true; 
    } 
} 

protected void SendCmd_Click(object sender, EventArgs e) 
{ 
    //send command over ip connection when button pressed   
    waitToLoad(); //Then wait for data to be received before rendering page 
} 

private void waitToLoad() 
{ 
    while (!finished) 
    { 
     Thread.Sleep(0); 
    } 
    finished = false; 
} 
+0

Copie possible de [Ecriture dans un TextBox à partir d'un autre thread?] (Http://stackoverflow.com/questions/519233/writing-to-a-textbox-from-another-thread) –

+1

Ceci n'est pas un doublon La question concerne les formulaires Web. – VMAtm

Répondre

2

Cette approche ne fonctionnera pas dans WebForms, comme après la manipulation demande tous les fils sont suspendus dans l'attente d'une nouvelle demande. Vous devriez introduire un javascript d'interrogation, qui appellera le côté serveur pour une mise à jour.

Vous devriez également sortir de l'application Web votre récepteur de prise ip. Vos options sont une sorte de démon (service Windows) ou de liaison WCF.

+0

Les threads ne continuent donc pas à s'exécuter en arrière-plan sur le serveur ... – Viper

+0

Cependant la façon dont j'ai implémenté le thread est que, pour la plupart, il fait tout le travail lors d'une requête. Il y a seulement quelques occasions où je verrais des données non sollicitées sur le récepteur de douille d'IP (qui était la seule raison que j'ai pensé qu'un fil était une bonne idée). Encore je devrais pouvoir obtenir les données du fil et le mettre dans une zone de texte, correct? Je sais que InvokeRequired ne fonctionne pas. Suggestions ... – Viper

+0

Votre discussion ne fonctionne que pendant la gestion des requêtes. Donc, * probablement *, vous pouvez obtenir des données de la prise ip alors, mais je ne me fierais pas à cela. Créez un appel ajax à un type de service côté serveur et mettez à jour la zone de texte avec jquery. – VMAtm