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
la tâche, bien sûr. – Axarydax
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. –