2011-02-07 2 views
1

J'essaie de réaliser des analyses du code dans Visual Studio, un je reçois cet avertissement:Résultats de code analyses dans Visual Studio

Avertissement 22 CA2000: Microsoft.Reliability: Dans la méthode 'MessengerViewModel.GoToRoom()' , appelez System.IDisposable.Dispose sur l'objet 'nouvelle Task (CS < $> 9__CachedAnonymousMethodDelegate6)' avant toutes les références à ce sont hors de portée . C: \ Users \ Jan \ Documents \ de Visual Studio de 2010 \ Projects \ C# \ Pokec_Messenger_Project \ Pokec_Messenger \ Spirit_Caliburn_Micro_v1.0 \ ViewModels \ MessengerViewModel_MainMenu.cs 45 Spirit_Caliburn_Micro_v1.0

sur cette méthode:

public void GoToRoom() 
    { 
     try 
     { 
      new System.Threading.Tasks.Task(() => 
      { 
       Service.GoToRoom(Account, SelectedRoom); 
       Service.LoadRoomMsg(Account, SelectedRoom); 
      } 
      ).Start(); 
     } 
     catch (Exception exception) 
     { 
      MsgBox.ShowException(exception); 
     } 

    } 

Je ne comprends pas sur quel objet je devrais appeler la méthode Dispose.

Modifié:

J'essayez ceci:

public void GoToRoom() 
    { 
     Task task = null; 
     try 
     { 
      task = new Task(() => 
      { 
       Service.GoToRoom(Account, SelectedRoom); 
       Service.LoadRoomMsg(Account, SelectedRoom); 
      }); 
      task.Start(); 
     } 
     catch (Exception exception) 
     { 
      MsgBox.ShowException(exception); 
     } 
     finally 
     { 
      if (task != null) 
       if (task.Status == TaskStatus.RanToCompletion || 
        task.Status == TaskStatus.Faulted || 
        task.Status == TaskStatus.Canceled) 
        task.Dispose(); 
     } 
    } 

analyses code Exécuter et obtenir:

Warning 21 CA2000 : Microsoft.Reliability : In method 'MessengerViewModel.GoToRoom()', call System.IDisposable.Dispose on object 'task' before all references to it are out of scope. C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger_Project\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\MessengerViewModel_MainMenu.cs 59 Spirit_Caliburn_Micro_v1.0 
+0

la tâche, bien sûr. – Axarydax

+0

La classe Thread a des ressources jetables mais les concepteurs d'origine ont été assez courageux pour ne pas laisser hériter IDisposable. Suivant impossible à utiliser. Assez proche de true pour Task, bien qu'il ait le fardeau supplémentaire de devoir gérer Task.Exception. –

Répondre

1

Il vous manque d'appeler disposer sur Task. Voir ce explanation pour savoir pourquoi.

Plus d'informations peuvent être trouvées sur ce sujet here

Questions connexes