2016-05-11 3 views
0

Мое приложение использует интернет, поэтому я хотел бы проверить, есть ли подключение к Интернету, а если нет - показать ошибку. я реализовал класс, как показано в this site:Запуск Изменено событие перед чем-либо изменения

public class InternetConnectionChangedEventArgs : EventArgs 
{ 
    public InternetConnectionChangedEventArgs(bool isConnected) 
    { 
     this.isConnected = isConnected; 
    } 

    private bool isConnected; 
    public bool IsConnected 
    { 
     get { return isConnected; } 
    } 
} 

public static class Network 
{ 
    public static event EventHandler<InternetConnectionChangedEventArgs> 
     InternetConnectionChanged; 

    static Network() 
    { 
     NetworkInformation.NetworkStatusChanged += (s) => 
     { 
      if (InternetConnectionChanged != null) 
      { 
       var arg = new InternetConnectionChangedEventArgs(IsConnected); 
       InternetConnectionChanged(null, arg); 
      } 
     }; 
    } 

    public static bool IsConnected 
    { 
     get 
     { 
      var profile = NetworkInformation.GetInternetConnectionProfile(); 
      var isConnected = (profile != null 
       && profile.GetNetworkConnectivityLevel() == 
       NetworkConnectivityLevel.InternetAccess); 
      return isConnected; 
     } 
    } 
} 

Но, используя этот подход, я должен дублировать мой код:

if(Network.IsConnected) 
{ 
    //do stuff with internet 
} 
else 
    //show error message 

Network.InternetConnectionChanged += async (s, args) => 
{ 
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => 
    { 
     if (args.IsConnected) 
     { 
      //do the same stuff with internet 
     } 
     else 
     { 
      //show the same error message 
     } 
    }); 
}; 

Поскольку InternetConnectionChanged событие запускает только в случае изменения подключения к Интернету, но мне также нужно прямо сейчас , если есть подключение к Интернету в начале. Есть ли способ сделать это без дублирования кода и не писать каждый код как отдельный метод?

ответ

1

Просто инкапсулировать логику в своем собственном методе, что-то вроде этого:

private void DoStuffDependingOnConnection(bool isConnected) 
{ 
    if (isConnected) 
    { 
     //... 
    } 
    else /* ... */ 
} 

Затем, когда ваша программа начинает выполнять

DoStuffDependingOnConnection(Network.IsConnected); 

И обработчик событий будет выглядеть следующим образом:

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, 
          async() => DoStuffDependingOnConnection(args.IsConnected)); 
Смежные вопросы