在 Windows phone 8 中获取 UI 调度程序
Posted
技术标签:
【中文标题】在 Windows phone 8 中获取 UI 调度程序【英文标题】:Obtaining UI dispatcher in Windows phone 8 【发布时间】:2013-10-16 09:04:15 【问题描述】:我一直在开发一个使用 Windows 运行时组件 (WRC) 的 Windows Phone 应用程序。一个由非 UI 线程访问的函数,需要使用访问 Windows Phone 应用程序的回调。
void WControlPointCallback::OnListChange(char *pFriendlyName)
// Callback function to access the UI
pCallBack->AlertCaller("Message");
起初没有使用它抛出的 Dispatcher
Platform::AccessDeniedException
.
然后我提到了this、this和this。 我尝试从 UI 获取 Dispatcher。
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
它抛出了System.AccessViolationException
。然后我用了
pDispatcher = Windows::UI::Core::CoreWindow::GetForCurrentThread()->Dispatcher;
在 C++ 代码(WRC)中。但这也会抛出 Platform::AccessDeniedException
。
如何在 Windows Phone 中获取 Dispatcher for UI?
【问题讨论】:
请不要使用code tags
来强调您认为是important
的words
。代码标签用于代码。
@Charles 感谢您的建议..
【参考方案1】:
您无法从 C++ 获取 Windows Phone 8 的调度程序:您需要将调用移至 C# 端的 UI 调度程序,而不是 C++ 端。
如果你可以这样做:
class DotNetClass : IWindowsRuntimeInterface
void AlertCaller(string message)
Deployment.Current.Dispatcher.BeginInvoke(() =>
MessageBox.Show(message);
【讨论】:
太好了。谢谢,它节省了很多时间。这个问题我坚持了将近两天。 非常感谢队友! :)以上是关于在 Windows phone 8 中获取 UI 调度程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率
如何在 Windows Phone 8.1 中获取当前位置的当前货币代码
BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用