Я пытаюсь запустить анализ кода в Visual Studio, и я получаю это предупреждение:
Предупреждение 22 CA2000:
Microsoft.Надежность: в методе
'MessengerViewModel.GoToRoom ()', вызов
System.IDisposable.Dispose на объекте
«новый
Задача (CS $ <> 9__CachedAnonymousMethodDelegate6)»
прежде чем все ссылки на него из
объем. C: \ Users \ Ян \ Documents \ Визуальное
студия
2010 \ Projects \ C # \ Pokec_Messenger_Project \ Pokec_Messenger \ Spirit_Caliburn_Micro_v1.0 \ ViewModels \ MessengerViewModel_MainMenu.cs 45 Spirit_Caliburn_Micro_v1.0
по этому методу:
public void GoToRoom()
{
try
{
new System.Threading.Tasks.Task(() =>
{
Service.GoToRoom(Account, SelectedRoom);
Service.LoadRoomMsg(Account, SelectedRoom);
}
).Start();
}
catch (Exception exception)
{
MsgBox.ShowException(exception);
}
}
Я не понимаю, для какого объекта я должен вызывать метод Dispose.
Отредактировано:
Я пытаюсь это:
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();
}
}
Запустите анализ кода и получите:
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