Результаты анализа кода в Visual Studio - PullRequest
1 голос
/ 07 февраля 2011

Я пытаюсь запустить анализ кода в 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

1 Ответ

1 голос
/ 07 февраля 2011

Он хочет, чтобы вы позвонили на Task.См. Это объяснение почему.

Более подробную информацию можно найти по этой теме здесь

...