Universal App网络连接状态

时间:2015-05-15 21:25:33

标签: c# asp.net xaml asp.net-web-api win-universal-app

我正在尝试在win8中构建一个通用应用程序,其中一个功能是显示连接状态。状态显示为一个按钮,该按钮变为“绿色”状态。如果有效并且红色'如果不活跃。

这是网络检测代码:

        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;
        }
    }
}

所以最后我调用函数来设置按钮的颜色,但是系统会抛出一个异常,说明&#34;应用程序正在使用为不同线程编组的线程&#34;

这是Main()构造函数中的代码。

一旦拔下网线,应用程序就会抛出异常..

    Network.InternetConnectionChanged +=async(s,e)=>
            {
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    isInternetON=e.IsConnected;
                });

                SetConnectionStaus(isInternetON);


            };

我的观点是,我在更新按钮的颜色的同时从另一条线上拨打一条线.....亲切的帮助!!

1 个答案:

答案 0 :(得分:0)

您可以使用此代码段从非UI威胁更新UI属性:

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
//Do thing / change value here
});