コード例 #1
0
        public static bool IsNetTcpConnectivityAvailable(Uri baseAddress, out Exception exception)
        {
            NetworkDetector.ConnectivityStatus connectivityStatu;
            exception = null;
            while (true)
            {
                NetworkDetector.ConnectivityStatus connectivityStatu1 = (NetworkDetector.ConnectivityStatus)Interlocked.CompareExchange(ref NetworkDetector.tcpConnectivityStatus, 1, 0);
                switch (connectivityStatu1)
                {
                case NetworkDetector.ConnectivityStatus.Testing:
                {
                    Thread.Sleep(5);
                    continue;
                }

                case NetworkDetector.ConnectivityStatus.Available:
                case NetworkDetector.ConnectivityStatus.Unavailable:
                {
                    return(connectivityStatu1 == NetworkDetector.ConnectivityStatus.Available);
                }

                default:
                {
                    connectivityStatu = NetworkDetector.CheckTcpConnectivity(baseAddress, out exception);
                    NetworkDetector.ConnectivityStatus connectivityStatu2 = (NetworkDetector.ConnectivityStatus)Interlocked.CompareExchange(ref NetworkDetector.tcpConnectivityStatus, (int)connectivityStatu, 1);
                    if (connectivityStatu2 == NetworkDetector.ConnectivityStatus.Testing)
                    {
                        return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available);
                    }
                    if (connectivityStatu2 == NetworkDetector.ConnectivityStatus.Unknown)
                    {
                        continue;
                    }
                    if (connectivityStatu == connectivityStatu2)
                    {
                        return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available);
                    }
                    NetworkDetector.tcpConnectivityStatus = 0;
                    continue;
                }
                }
            }
            return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available);
        }