我正在编写一个Windows Phone 8.1 应用程序 (WINRT)。
我正在显示一个状态栏:
- 我的应用程序(欢迎)
- MYAPP(通过WIFI连接)
- MYAPP(通过手机连接)
如果用户通过 Wifi 连接,则显示“MYAPP (CONNECTED VIA WIFI)”,如果用户通过蜂窝网络连接,则显示“MYAPP (CONNECTED VIA CELLULAR)”。
此外,它通过使用 DispatcherTimer() 在 5 秒后恢复默认的进度条文本“MYAPP (WELCOME)”;
因此,我执行 GetInternetConnectionProfile() ,返回 _connectedVia,传递给构造函数或 OnNavieratedTo 中的 GetInternetConnectionProfile(_connectedVia) 函数。
Connectivity.GetInternetConnectionProfile();
StatusBarClassObject.StatusBarGenerator(_connectedVia);
在第一次执行页面之前一切正常。
现在,每次发生网络更改(Wifi 到蜂窝网络,反之亦然,或者 wifi 到无网络,等等),它都会执行 NetworkStatusChanged 事件处理程序,其流程与构造函数中的流程相同。
NetworkInformation.NetworkStatusChanged += new NetworkStatusChangedEventHandler((n) => Connectivity.GetInternetConnectionProfile());
NetworkInformation.NetworkStatusChanged += new NetworkStatusChangedEventHandler((n) => StatusBarClassObject.StatusBarGenerator(_connectedVia));
但问题是:
StatusBarCloseTimer = new DispatcherTimer();
这次给了我错误。第一次执行效果很好。
“应用程序调用了为不同线程编码的接口(interface)。(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();
给了我同样的错误:
“应用程序调用了为不同线程编码的接口(interface)。(HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD))”
最佳答案
已解决:await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {}
关于c# - 调度程序计时器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233054/