2014-01-27 1 views
1

В настоящее время я разрабатываю некоторые настольные приложения, используя websockets (точнее: я работаю с Alchemy WebSockets). В настоящее время мой код работает отлично, но Visual Studio 2010 говорит мнеCA2000 - «вне школы-младшие программисты» - ошибки или ложные срабатывания?

Warning 2 CA2000 : Microsoft.Reliability : In method 'ServerController.SetupServer(int)', call System.IDisposable.Dispose on object '<>g__initLocal0' before all references to it are out of scope. C:\Users\MaRiedl\documents\visual studio 2010\Projects\Alchemy-WebSockets\AWS-Server\ServerController.cs 38 AWS-Server 

Я уже пытался решить эту проблему с помощью MSDNs (http://msdn.microsoft.com/en-us/library/ms182289.aspx) и (конечно) путем поиска и stackoverflow.com дня ночи (Uses of "using" in C#) - но, к сожалению, это не улучшится.

Итак, вот мой вопрос: я далеко от «младшего», чтобы увидеть проблему, которую я не могу найти, или это просто ложный позитив от Visual Studio 2010?

Вот кусок кода, который я борюсь с:

private WebSocketServer _webSocketServer; 

private void SetupServer(int port) 
    { 
     // set port and configure authorized ip addresses to connect to the server 
     _webSocketServer = new WebSocketServer(port, IPAddress.Any) 
     { 
      OnReceive = OnReceive, 
      OnSend = OnSend, 
      OnConnect = OnConnect, 
      OnConnected = OnConnected, 
      OnDisconnect = OnDisconnect, 
      TimeOut = new TimeSpan(0, TimeoutInMinutes, 0) 
     }; 
     _webSocketServer.Start(); 
    } 

ответ

5

Предупреждения Анализа кода, потому что вы используете инициализатор объекта на одноразовый объекте.

Всякий раз, когда вы используете инициализатор объекта, создается временная, невидимая локальная (см. this question). Этот объект (<>g__initLocal0), на которое ссылается сообщение, поскольку вы не можете избавиться от него, если генерируется исключение во время его создания.

Если вы установите свойства отдельно

_webSocketServer = new WebSocketServer(port, IPAddress.Any); 
_webSocketServer.OnReceive = OnReceive; 

то сообщение исчезнет, ​​так как не создается временный объект.

+1

спасибо, это очень помогло - не знало, что эти фантастические фигурные скобки приведут к временному объекту –

Смежные вопросы