Frage

Ich habe eine Seite, wo, wenn eine Operation schief geht will ich den Timer zu starten, 30 Sekunden warten, um den Timer stoppen und wiederholen Sie den Vorgang. Jedes Mal, wenn der Timer beginnt muss ich den Benutzer darüber informieren, indem sie einige Label Text zu ändern.

Wie kann ich es tun?

War es hilfreich?

Lösung

Wenn ich richtig verstehe, denke, die ich Ihnen eine Client-Seite (JavaScript) verwenden sollte stattdessen Timer. Sie können einen serverseitigen Timer für diese.

Wenn Sie den Fehler-Zustand erfassen, können Sie das Etikett entsprechend aktualisieren und sie dem Benutzer angezeigt werden soll. Zur gleichen Zeit, rufen Sie eine clientseitige Timer, der nach 30 Sekunden wird Postback.

z. setzen Sie den folgenden Timer-Code auf Ihrer Seite:

  <script>
    function StartTimer()
    {
      setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds
    }
    function DoPostBack()
    {
      __doPostBack(); // invoke the postback
    }
  </script>

Bei dem Fehlerzustand, müssen Sie sicherstellen, dass der clientseitige Timer gestartet werden:

if (error.Code == tooManyClientsErrorCode)
{
  // add some javascript that will call StartTimer() on the client
  ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true);
  //...
}

Ich hoffe, das hilft (der Code nicht getestet, da ich momentan nicht verfügbar Visual Studio haben Sie).

Update:

Um „simulieren“ auf eine Schaltfläche klicken, müssen Sie auf Schaltfläche Client-ID übergeben an die __doPostBack () -Methode, z:

function DoPostBack()
{
  var buttonClientId = '<%= myButton.ClientID %>';
  __doPostBack(buttonClientId, ''); // simulate a button click
}

Für einige andere Möglichkeiten finden Sie in der folgenden Frage / Antwort:

Andere Tipps

von der Client-Seite ein Postback zu zwingen, können Sie direkt die __doPostBack Methode aufrufen

Es braucht zwei Argumente, Eventtarget und eventargument; da Sie diesen Anruf außerhalb des normalen Zyklus asp.net machen müssen Sie IsPostBack auf Ihrer Seite Load-Ereignis (oder init, Ihre Wahl) überprüfen - wenn es sich um ein Postbacks ist, dann müssen Sie bei diesen beiden Argument suchen, die gerollt erhalten auf, als Formelemente (Request.Form [ "__ Eventtarget"]). Überprüfen Sie ihren Wert zu sehen, ob die Postbacks kam von Ihrem Anruf oder eine der anderen Kontrollen, wenn der Wert dieser übereinstimmt, was Sie von der Client-Seite passieren in dann Wechsel zum Label-Test macht

Zwei Wege, dies zu tun, erste Weg, ein bisschen besser, wenn Sie andere Funktionen auf dem gleichen Thread aufrufen müssen. Fügen Sie einen Script und einen Timer auf die aspx Seite, können Sie aus Toolbox fallen lassen oder einfach den Code eingeben. Scriptmanager muss vor asp deklariert werden: Timer. OnTick Brände nach jedem Intervall.

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:Timer ID="Timer1" runat="server" Interval="4000" OnTick="Timer1_Tick">
    </asp:Timer>

In dem Code-behind (c # in diesem Fall):

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("tick tock");
    }

Zweiter Weg nicht so gut, wenn Sie die Funktionen benötigen auf dem gleichen Thread zu feuern. Sie können einen Timer in ASP.net mit C # tun, der folgende Code löst die Funktion alle 2 Sekunden. In der Code-behind (CS-) Datei:

    // timer variable
    private static System.Timers.Timer aTimer;

    protected void Page_Load(object sender, EventArgs e)
    {
        // Create a timer and set a two second interval.
        aTimer = new System.Timers.Timer();
        aTimer.Interval = 2000;

        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;

        // Have the timer fire repeated events (true is the default)
        aTimer.AutoReset = true;

        // Start the timer
        aTimer.Enabled = true;
    }

Dann die Funktion machen Sie in diesem Format nennen:

//Doesn't need to be static if calling other non static functions

    private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }

Beispielausgabe:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top