Hallo, ich möchte eine Konsolenanwendung schreiben die im Browser läuft. Hab gehört das das mit WebAssembly funktionieren soll. Hier mein Versuch an einer ganz simplen Anwendung. Soll im 1 Sekunden Takt einen neuen Buchstaben des Alphabets ausgeben. Leider funktioniert das nicht und das Programm hängt für ein paar Sekunden und gibt dann alle Buchstaben aus (A steht von Anfang an da).
Index.razor
@page "/"
<PageTitle>Index</PageTitle>
<button @onclick="Run">Start</button>
<h1>@_text</h1>
@code {
public string _text = "A";
public void AppendText(string text)
{
_text += text;
}
public async Task Run()
{
await Task.Delay(1000);
AppendText(" B");
await Task.Delay(1000);
AppendText(" C");
await Task.Delay(1000);
AppendText(" D");
}
}
Was mache ich falsch oder ist mein Vorhaben so gar nicht möglich?
Probiere mal
<button onclick="@(async () => await Run())">Start</button>
Habe ich von Execute async method on button click in blazor.
Lässt sich starten, aber leider ohne Änderung. Funktion ist die gleiche.
Dann hat das wohl mit dem Aktualisieren des angezeigten Textes _text
zu tun. Dies wird wohl standardmäßig erst nach Aufruf der gesamten onclick
-Methode aktualisiert. Ich weiß aber leider nicht, wie man dies selber aktualisieren kann.
Probier mal diese kleine Änderung am Code:
public void AppendText(string text)
{
_text += text;
this.StateHasChanged();
}
Hat die Blume einen Knick, war der Schmetterling zu dick.
StateHasChanged();
Funktioniert. Besten Dank!