Beispiel #1
0
        private void ScanThreadProc()
        {
            lock (m_syncRoot)
            {
                Debug.WriteLine("+WiFiService.ScanThreadProc");
                Scanning = true;

                do
                {
                    if (m_wzc == null)
                    {
                        break;
                    }
                    if (!WiFiEnabled)
                    {
                        break;
                    }

                    try
                    {
                        var et = Environment.TickCount;

                        if (m_currentAPs == null)
                        {
                            m_currentAPs = m_wzc.NearbyAccessPoints;
                        }
                        else
                        {
                            m_currentAPs.Refresh();
                        }

                        if (!WiFiEnabled)
                        {
                            break;
                        }

                        var added   = m_currentAPs.Except(m_knownAPs);
                        var lost    = m_knownAPs.Except(m_currentAPs);
                        var updated = m_knownAPs.Intersect(m_currentAPs);

                        m_knownAPs = m_currentAPs.ToList();
                        RaisePropertyChanged("KnownAPs");

                        var handler = ScanComplete;

                        et = Environment.TickCount - et;
                        Debug.WriteLine(string.Format("Network scan took {0}ms", et));

                        if (!WiFiEnabled)
                        {
                            break;
                        }

                        if (handler != null)
                        {
                            ThreadPool.QueueUserWorkItem(delegate
                            {
                                handler(added.ToArray(), lost.ToArray(), updated.ToArray());
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(string.Format("Exception in WiFi network scan.  If you disabled the adapter, you can ignore this error: ", ex.Message));

                        // if we disable the WiFi adapter while this loop is executing, bad things can happen
                        // it's better to just catch around the whole thing and ignore
                        if (!WiFiEnabled)
                        {
                            break;
                        }
                    }
                } while (!m_stopScanEvent.WaitOne(ScanPeriod, false));

                Debug.WriteLine("-WiFiService.ScanThreadProc");
                Scanning     = false;
                m_currentAPs = null;
            }
        }