1

当我的回调被调用时,我得到:

发生编组错误。

什么是“编组”?以及为什么我的回调无效。请告诉我。

这是代码。

   public Page1()//constructor
    {
        this.InitializeComponent();
        NetworkInformation.NetworkStatusChanged += new Windows.Networking.Connectivity.NetworkStatusChangedEventHandler(OnNetworkStatusChanged);//regist callback
    }

    void OnNetworkStatusChanged(object arg)//callback method
    {
        App.mainFrame.Navigate(typeof(Page2));
    }
4

1 回答 1

1

错误消息告诉您“导航”方法正在错误的线程上执行(并且需要编组,以便在正确的线程上调用它)。

在 Windows8 中,与 UI 交互的代码应该只在 UI 线程上执行 - 并且回调方法(例如OnNetworkStatusChanged上面的方法)不一定在 UI 线程上调用。要确保代码在 UI 线程上执行,而不是在其他线程上执行,请使用如下惯用语:

// somewhere in your code behind, in code that definitely runs on the UI thread
// - e.g. in the OnLoaded method of your main window:
CoreDispatcher Dispatcher = Windows.UI.CoreWindow.GetForCurrentThread().Dispatcher; 


// In your call-back method:
if ((Dispatcher != null) && (!Dispatcher.HasThreadAccess))
{
    Dispatcher.RunAsync(
                Windows.UI.Core.CoreDispatcherPriority.Normal, 
                (obj, invokedArgs) => { App.mainFrame.Navigate(typeof(Page2));}, 
                this, 
                null
     );
}
else
    App.mainFrame.Navigate(typeof(Page2));
于 2012-10-19T11:44:22.543 回答