DispatcherTimer错误

时间:2015-01-30 09:42:41

标签: c# multithreading xaml oop windows-phone-8.1

我正在编写 Windows Phone 8.1应用程序(WINRT)。

我正在显示 StatusBar

  1. MYAPP(欢迎)
  2. MYAPP(通过WIFI连接)
  3. MYAPP(通过细胞连接)
  4. 如果用户通过Wifi连接,则显示“MYAPP(通过WIFI连接)”,如果用户通过手机连接,则显示“MYAPP(通过蜂窝连接)”。

    此外,它使用DispatcherTimer()在5秒后恢复为默认progressbartext“MYAPP(WELCOME)”;


    因此,我执行 GetInternetConnectionProfile(),返回 _connectedVia ,在构造函数或OnNavigatedTo中传递给 GetInternetConnectionProfile(_connectedVia)函数。

    Connectivity.GetInternetConnectionProfile();
    StatusBarClassObject.StatusBarGenerator(_connectedVia);
    

    在第一次执行页面之前一切正常。

    现在,每次网络更改(Wifi到蜂窝网络或反之亦然,无线网络等)时,它都会执行 NetworkStatusChanged eventhandler ,其执行过程与构造函数相同。< / p>

        NetworkInformation.NetworkStatusChanged += new NetworkStatusChangedEventHandler((n) => Connectivity.GetInternetConnectionProfile());
    
       NetworkInformation.NetworkStatusChanged += new NetworkStatusChangedEventHandler((n) => StatusBarClassObject.StatusBarGenerator(_connectedVia));
    

    但问题是: 这次StatusBarCloseTimer = new DispatcherTimer();给了我错误。首次执行此工作正常。

    “应用程序调用了为不同线程编组的接口。(HRESULT异常:0x8001010E(RPC_E_WRONG_THREAD))”

    我试图使用:

    await CoreDispatcherObject.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
             DispatcherTimerInit();
            });
    
    
    
    private void DispatcherTimerInit()
                {
            //  throw new NotImplementedException();
                StatusBarCloseTimer = new DispatcherTimer();
                StatusBarCloseTimer.Interval = TimeSpan.FromMilliseconds(3000);
                StatusBarCloseTimer.Tick += StatusBarCloseTimer_Tick;
                }  
    

    但现在StatusBarCloseTimer.Start();给了我同样的错误: “应用程序调用了为不同线程编组的接口。(HRESULT异常:0x8001010E(RPC_E_WRONG_THREAD))”

1 个答案:

答案 0 :(得分:2)

解决:等待CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.N ormal,()=&gt; {}