Ich möchte den Fortschritt anzeigen Dialog innerhalb einer asynchronen Ereignis-Listener-Methode. Derzeit ist der UI-Component nur sichtbar, wenn die asynchrone Methode fertig ausgeführt wurde. Hier ist mein Code:zeigt den Fortschritt Dialog innerhalb einer asynchronen Methode
async void process_Click(object sender, EventArgs e)
{
launchRingProgressDialog();
var comp = await Start();
}
public void launchRingProgressDialog()
{
Activity.RunOnUiThread(() =>
{
ProgressDialog ringProgressDialog = ProgressDialog.Show(Activity, "Processing", "Please wait", true);
ringProgressDialog.SetCancelable(true);
});
}
Der Fortschrittsdialog zeigt an, wenn ich die Methode launchRingProgressDialog()
außerhalb der Asynchron-Methode aufrufen, aber nicht während der Asynchron-Methode ausgeführt wird. Wie mache ich die asynchrone Methode, damit die UI-Komponente nicht blockiert wird?
bearbeiten
Wie ich verstehe, läuft die Asynchron-Methode innerhalb des UI-Thread so ist RunOnUiThread nicht benötigt. Ich habe meinen Code wie folgt geändert, aber ich stehe immer noch vor demselben Problem.
async void process_Click(object sender, EventArgs e)
{
ringProgressDialog = ProgressDialog.Show(Activity, "Processing", "Please wait", true);
var comp = await Start();
ringProgressDialog.Dismiss();
}
Ich verstehe, dass die Async-Methode im UI-Thread ausgeführt wird und ich RunOnUiThread nicht benötigen. Ich starte den Dialog, bevor die asynchrone Operation ausgeführt wird, und lehne sie ab, nachdem ich gewartet habe, aber das funktioniert nicht wirklich. Der Dialog oder eine andere UI-Komponente wird erst sichtbar, nachdem die gesamte asynchrone Methode ausgeführt wurde. Vielleicht sollte ich einen neuen Thread in der asynchronen Methode starten und die asynchrone Operation darin ausführen? –
@AhmedMujtaba Wenn ich meinen Code ändere, den ich als Beispiel für einen 'ProgressDialog' angegeben habe, erscheint er und wird zur richtigen Zeit geschlossen. Ist Ihre Async-Operation von kurzer Dauer (<1 Sekunde)? Wenn dies der Fall ist, könnte dies der Grund sein, dass, wenn eine Async-Methode zum ersten Mal nach dem Start der Anwendung aufgerufen wird, Xamarin eine kleine Pause in der Anwendung verursacht. – EvilTak
Ich habe es gelöst, indem ich die asynchrone Operation in Task.Run ausgeführt habe. Ich habe ein kleines Problem, das noch gelöst werden muss. Ich wollte ein neues ProgressDiaglog starten, nachdem das erste ProgressDiaglog beendet wurde, aber das zweite Dialogfeld wird erst angezeigt, wenn die Async-Methode beendet ist. Liegt das daran, dass auf dem UIhread zu viel Aktivität stattfindet und andere UI-Vorgänge blockiert werden? –