ASP.Net: Asynchrones Update-Panel Wird mit zwei Update-Panels geladen

9

Ich versuche, Daten in Update-Panels auf einer Website asynchron anzuzeigen, wo die Datenwiederauffindungs-Tasks unterschiedlich lange dauern. Ich möchte jedes Panel aktualisieren, um die Daten auf der Seite nach Abschluss jeder Aufgabe anzuzeigen.

Unabhängig davon, was ich versuche, ändern alle Update Panels ihren Inhalt, nachdem die letzte Aufgabe abgeschlossen wurde.

Zum Beispiel:

Ich habe zwei Aufgaben:

  • Eine, die versucht, ein Label in UpdatePanel1 nach 5 Sekunden zu aktualisieren
  • Eine, die versucht, ein Label in UpdatePanel2 nach 10 Sekunden zu aktualisieren

Das erwartete Ergebnis ist, dass sich nur die Bezeichnung in UpdatePanel1 nach 5 Sekunden ändert, beide Update-Panels werden jedoch gleichzeitig um 10 Sekunden aktualisiert.

Beide Update-Panels sind auf updatemode="Conditional" gesetzt und sie werden aufgefordert, Postback von Client-Javascript. Im Folgenden finden Sie eine vollständige Auflistung des obigen Beispiels.

Was fehlt mir hier? Wie bekomme ich ein Update-Panel zum Laden, und das andere, beide Aufgaben laufen asynchron?

Danke,

TM

ASPX:

%Vor%

C #:

%Vor%     
Owen Blacker 04.12.2009, 16:28
quelle

5 Antworten

1

Setzen Sie einfach ein Trigger-Tag in jedes UpdatePanel, das auf einen asp: Timer zeigt, und setzen Sie das Intervall auf 5000 und 10000 Millisekunden.

Unten ist die Lösung, die Sie fragen, mit UpdatePanel, aber passen Sie auf, weil alle 5 und 10 Sekunden ein PostBack für Timer ausgelöst wird:

Ich empfehle die Verwendung von Javascript oder jQuery, um PostBacks zu vermeiden.

ASPX:

%Vor%

C #

%Vor%     
Stephan 13.08.2013 23:08
quelle
0

Ich vermute, dass Sie das nicht asynchron aufrufen, wie Sie denken, dass b / c des Threads beitritt. Es sieht so aus, als würden Sie Block OnPrender blockieren, bis Thread 2 beendet wird. Da sowohl 1 als auch 2 von derselben Methode aufgerufen werden, sind Sie blockiert, bis beide erledigt sind. Wenn Sie ein paar Schreibstriche einwerfen, um zu sehen, wann die Dinge aufgerufen werden, wird es vielleicht etwas einfacher zu sehen, was passiert.

Ich vermute auch, dass der Text auf 1 nicht wirklich aktualisiert wird, bis der Prerender von dem, was ich weiß, abgeschlossen ist. Traditionelles ASP.NET, nichts wird zurück an den Client gesendet, bis nach dem Prerender abgeschlossen ist. Aber ich weiß nicht viel über das Update-Panel, also könnte ich darüber reden und antizipieren, dass ich abgemeldet werde ...

    
Jim L 04.12.2009 16:44
quelle
0

Die Joins in Ihrem Pre-Render-Handler blockieren, dass das Rendering zum Client zurückkehrt. Statt dessen, was Sie haben, vermute ich, dass Sie stattdessen so etwas tun könnten:

%Vor%

Dieser Code hat den unglücklichen Nebeneffekt, dass er darauf angewiesen ist, zu wissen, welcher Thread zuerst zurückkehrt.

Wenn Sie jedoch nur herausfinden möchten, wie Sie Ereignisse vom Server zum Client senden (und HTML 5 ist eine Option), empfehle ich, serverseitige Ereignisse (oder Web-Sockets, wenn Sie Vollduplex-Kommunikation benötigen). Wenn html 5 keine Option ist, glaube ich, dass Sie einige Javascript-Hacks verwenden können, um Web-Sockets zu simulieren. Sie können einige hier lesen und hier .

edit: Links für nicht-HTML 5 Alternativen hinzugefügt

    
kmkemp 06.04.2012 18:08
quelle
0

Stattdessen können Sie zwei Timer-Steuerelemente verwenden, eines mit einem Intervall von 5000 und ein weiteres mit einem Intervall von 10000

    
Sanjay 19.01.2013 12:50
quelle
0

Können Sie .NET 4.5 verwenden oder sind Sie auf frühere Versionen beschränkt? v4.5 hat viele neue Funktionen, die das Erstellen von asynchronen Methoden sehr einfach machen, ohne sich um das Thread-Management kümmern zu müssen. Dieser Link enthält eine gute Erklärung, wie eine asynchrone Methode mit der neuen % co_de implementiert werden kann % Aufgabe und Task / async Operatoren: Arbeiten mit asynchronen Operationen in ASP.NET 4.5 Web Forms

Im Wesentlichen müssen Sie nur für jede Methode, die für das Aktualisieren des Updatepanels verantwortlich ist, ein await erstellen und beim Laden der Seite starten. Am Ende kann jede Aufgabe für 5 oder 10 Sekunden schlafen, bevor sie sich selbst anruft, um Ihnen den gewünschten Effekt zu geben.

    
Nathon Fowlie 30.10.2012 05:39
quelle

Tags und Links