2017-03-17 1 views
0

Je travaille sur un site Web créé dans .NET Core (utilisant le framework .net complet) qui utilise des tâches d'arrière-plan pour obtenir une liste de périphériques. Je veux afficher une "vue" de chargement comme this pendant que la tâche obtient des données d'un autre pc (en utilisant les requêtes GET) et ensuite, lorsque la tâche est terminée, je veux afficher la table avec les périphériques. Comment puis je faire ça? Voici un petit morceau de mon code:Création d'une vue Chargement dans .NET Core/Modification sans retour C#

public class DeviceController : Controller { 

     public IActionResult Index() { 

      if (DataSyncronizer.getDeviceListTask.Status == TaskStatus.Running) { 

       // TODO Show the loading screen here. 

       // return this.View("Loading"); 
      } 

      if (DataSyncronizer.getDeviceListTask.Status == TaskStatus.Faulted) { 
       ViewData["ErrorTitle"] = "Errore di sincronizzazione"; 
       ViewData["ErrorText"] = "Cannot get devices"; 
       return this.View("Error"); 
      } 

      if (DataSyncronizer.getDeviceListTask.Status == TaskStatus.Canceled) { 
       ViewData["ErrorTitle"] = "Errore di sincronizzazione"; 
       ViewData["ErrorText"] = ""; 
       return this.View("Error"); 
      } 

      return this.View(DataSyncronizer.Devices); 
     } 

Et ceci est la fonction qui obtient la liste des périphériques:

public static class DataSyncronizer { 

    public static Task<List<Device>> getDeviceListTask { get; private set; } 
    public static List<Device> Devices = new List<Device>(); 

    public static Task UpdateDevices() { 
         getDeviceListTask = new Task<List<Device>>(() => 
             Device.GetMyDevicesList(meUser)); 


         getDeviceListTask.ContinueWith((result) => { 
           DataSyncronizer.Devices = result.Result; 
          }, TaskScheduler.Current); 

         getDeviceListTask.Start(); 
         return getDeviceListTask; 
        } 
     } 

Je suis désolé si le code est mauvais, mais je suis nouveau asynchrone la programmation.

Désolé pour le mauvais anglais.

Merci beaucoup.

Répondre

0

Vous pouvez afficher le chargeur juste avant d'appeler UpdateDevices().

ajouter à la fin de votre tâche

.ContinueWith(t => "Function to hide loader"); 

Exemple

var webTask = Task.Run(() => 
{ 
    try 
    { 
     wcf.UploadMotionDynamicRaw(bytes); //my web service 
    } 
    catch (Exception ex) 
    { 
     //deal with error 
    } 
}).ContinueWith(t => "Function to hide loader"); 
+0

Oui, je pourrais le faire mais je ne veux pas parce que l'utilisateur peut faire autre chose tandis que la liste des appareils est toujours en cours de chargement. Je veux juste afficher la vue de chargement si l'utilisateur demande la liste des périphériques et qu'il n'est pas encore prêt. – Edoardo396

+0

Modifié le message pour une solution qui pourrait aider –

+0

Oui mais comment puis-je cacher le chargeur (rediriger vers/Devices/List) sans retourner un IActionResult? – Edoardo396