我正在构建一个Windows应用商店应用,我有一些代码需要发布到UI线程.
为此,我想检索CoreDispatcher并使用它来发布代码.
似乎有几种方法可以这样做:
// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;
// Second way
Window.Current.Dispatcher;
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个是正确的?或两者是否相同?
c# dispatcher async-await windows-runtime windows-store-apps
我有兴趣从Windows Phone 8中的C++代码调用C#方法.我已经学会了如何通过C++代码中的委托声明将回调函数传递给C#中的C++代码,但是我想知道我是否可以做以下任何一项:
直接从C++代码调用某些方法.这将涉及以某种方式检查来自C++的C#对象化妆,对我来说似乎不太可能,但我想我无论如何都会问你们
触发C#代码中的事件,然后可以通过C#方法处理
使用调度程序在主UI线程中调用C#回调,以便回调可以修改UI元素
使用调度程序触发C#代码中的事件,(基本上是上述两点的合并)
简而言之,我正在寻找尽可能多的C++ - > C#通信技巧,因为你们可以抛弃我,我想要全部学习.:)
我一直在开发一个消耗Windows运行时组件(WRC)的Windows Phone应用程序.由非UI线程访问的功能需要使用访问Windows Phone应用程序的回调.
void WControlPointCallback::OnListChange(char *pFriendlyName)
{
// Callback function to access the UI
pCallBack->AlertCaller("Message");
}
Run Code Online (Sandbox Code Playgroud)
最初没有使用Dispatcher它扔了
Platform::AccessDeniedException.
然后我提到了这个,这个和这个.我试图从UI获取Dispatcher.
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
Run Code Online (Sandbox Code Playgroud)
它扔了System.AccessViolationException.然后我用了
pDispatcher = Windows::UI::Core::CoreWindow::GetForCurrentThread()->Dispatcher;
Run Code Online (Sandbox Code Playgroud)
在C++代码(WRC)中.但这也引发了Platform::AccessDeniedException.
如何在Windows Phone中获取Dispatcher for UI?
我有一些看起来像这样的WP7代码:
using System.Windows;
using System.Windows.Threading;
public static class GlobalDispatcher
{
public static Dispatcher Current { get { return Deployment.Current.Dispatcher; } }
}
Run Code Online (Sandbox Code Playgroud)
WinRT中的等价物是什么?是否没有全局可访问的Dispatcher(或CoreDispatcher)对象?