我尝试在visual studio中运行代码分析,我得到了这个警告:
警告22 CA2000: Microsoft.Reliability:方法 'MessengerViewModel.GoToRoom()',来电 System.IDisposable.Dispose on object '新 任务(CS $<> 9__CachedAnonymousMethodDelegate6)” 在所有引用它之前 范围。 C:\ Users \用户扬\文档\ Visual 工作室 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