Функция силы сигнала WiFi с ошибками компиляции

Я использую функцию для возврата текущего значения силы сигнала WiFi, указанного здесь: http://www.dotnet247.com/247reference/msgs/42/211278.aspx

Когда я запускаю код в Visual Studio 2008, я получаю ошибки компиляции:

Тип пространства имен "ManagementObjectSearcher" не найден.

Я использую 'использование System.Manangement'

Моя основная задача - получить уровень сигнала и вставить его в текстовое поле в форме окна, поэтому, как только я возьму значение с помощью функции, приведенной ниже, я просто вставлю его в поле для просмотра пользователем.

Есть идеи, почему я получаю эти ошибки?

Код:

 public static void signalStrentgh()
        {
           ManagementObjectSearcher searcher = new  
           ManagementObjectSearcher(@"root\WMI", "select 
           Ndis80211ReceivedSignalStrength from MSNdis_80211_ReceivedSignalStrength 
           where active=true");

            foreach (ManagementObject mo in searcher.Get())
            {
                Console.WriteLine("{0}", mo["Ndis80211ReceivedSignalStrength"]);
            }
        }

Примечание * Ниже приведена старая неправильная версия кода, выполненная на C++. Это со ссылкой на комментарии и помощь.

int GetSignalStrength()
{
  ManagementObjectSearcher *searcher = new ManagementObjectSearcher(
  "root\\WMI",
  "select Ndis80211ReceivedSignalStrength from
  MSNdis_80211_ReceivedSignalStrength where active=true");

  ManagementObjectCollection *queryCollection = searcher->Get();

  ManagementObjectCollection::ManagementObjectEnumer ator* queryEnum =
  queryCollection->GetEnumerator();
  while (queryEnum->MoveNext());

  ManagementBaseObject* object = queryEnum->get_Current();
  Object* signalStrength =
  object->GetPropertyValue(L"Ndis80211ReceivedSignalStrengt h");
  return (Convert::ToInt32(signalStrength->ToString()));
}

2 ответа

Решение

Чтобы ответить на ваш вопрос, вы не можете использовать object как имя переменной. object это ключевое слово. Попробуйте переименовать переменную в obj или же o и посмотрим, работает ли это.

Для дальнейшего использования, я думаю, вы компилируете код на C#, используя некоторые действительно старые синтаксические приемы. И я думаю, что это сбивает с толку многих людей, пытающихся определить, действительно ли это C#.

Синтаксис указателя, вероятно, не нужен. ManagementObjectSearcher является частью пространства имен System.Management и поэтому безопасен для использования без синтаксиса небезопасного указателя.

Кроме того, почему вы используете квалификатор псевдоним пространства имен (::) Должно быть безопасным непосредственное использование оператора точки (ManagementObjectCollection.ManagementObjectEnumerator). На самом деле здесь должно быть безопасно использовать оператор точки вместо синтаксиса указателя.

То, что я нашел для C#, похоже на MSDN: http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/34a66ee5-34f8-473d-b6f2-830a14e2300b/

Прочитай внимательно. Кажется, вы используете или адаптировали C++ CLR-код. Ваш код кажется почти правильным.

Другие вопросы по тегам