9

我一直在开发一个使用 Windows 运行时组件(WRC)的 Windows Phone 应用程序。一个由非 UI 线程访问的函数,需要使用访问 Windows Phone 应用程序的回调。

void WControlPointCallback::OnListChange(char *pFriendlyName)
{
    // Callback function to access the UI
    pCallBack->AlertCaller("Message");  
}

起初没有使用它抛出的 Dispatcher

Platform::AccessDeniedException.

然后我提到了这个这个这个。我试图从 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?

4

1 回答 1

11

您无法从 C++ 获取 Windows Phone 8 的调度程序:您需要将调用移动到 C# 端的 UI 调度程序,而不是 C++ 端。

如果你能做这样的事情:

class DotNetClass : IWindowsRuntimeInterface
{
    void AlertCaller(string message)
    {
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            MessageBox.Show(message);
        }
    }
}
于 2013-10-09T16:45:44.710 回答