Uruchamiam długą funkcję jako zadania w tle w swoim asp.net zastosowanie. Przed zakończeniem zadania głównego wątku (chcę, aby to było tylko tak, ponieważ, jeśli używam słowa kluczowego await i sprawię, że główny wątek czekać na zakończenie zadania w tle, otrzymam komunikat o błędzie serwera proxy
Błąd serwera proxy
Proxy-serwer otrzymał błędną odpowiedź od nadrzędnego serwera, tak jak w tle zadaniem zbyt długa
Ale po zakończeniu zadania ani nie mogę zaktualizować stronę, aby przekierować ją na tej samej stronie, ani ja nie mogę zastąpić interfejs użytkownika. Czy jest jakiś sposób zaktualizować interfejs użytkownika po zakończeniu wykonywania głównego wątku.
Mój kod brzmi tak:
protected void btnImport_Click(object sender, EventArgs e)
{
var task = ImportThread();
if (task.IsCompleted)
{
DisplaySuccess("Import success");
}
else
DisplayError("Import failed");
}
private async Task<bool> ImportThread()
{
try
{
var success = await Task<bool>.Run(() => new Manager().Import().ConfigureAwait(false);
if (task.IsCompleted)
{
DisplaySuccess("Import success");
}
else
{
DisplayError("Import failed");
}
return true;
}
Opisane powyżej zadanie asynchroniczne czeka metody opisanej poniżej, który jest obecny w innej klasie.
public bool Import()
{
// some operations here
return true;
}
Po zakończeniu tej metody, sterowanie jest zwracane w ImportThread()
ale kod napisany tam do zastępowania interfejsu użytkownika, nie aktualizuje interfejs użytkownika. Muszę zaktualizować interfejs użytkownika ze statusem importu. A także od ImportThread
sterowanie również nie wraca do metody zdarzenia naciśnięcia przycisku.
Proszę, pomóż mi w jakikolwiek sposób zaktualizować interfejs użytkownika statusu importu.
Uwaga: próbowałem użyć Redirect.Response
w ImportThread()
aby odświeżyć stronę, ale to nie zadziałało