Visual Studio中的代码分析结果

时间:2011-02-07 20:29:49

标签: c# visual-studio-2010 dispose

我尝试在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

1 个答案:

答案 0 :(得分:1)

希望您在Task上拨打电话。有关原因,请参阅此explanation

可以在此主题here

上找到更多信息