在 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 来强调您认为是importantwords。代码标签用于代码。 @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 中播放声音片段

在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率

如何在 Windows Phone 8.1 中获取当前位置的当前货币代码

BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用

如何在 Windows Phone 8.1 上从数据库中获取图像并将其显示为字节数组

在 Windows Phone 8.1 上获取给定 CivicAddress 的坐标/地理点