我们提供的库需要在自己的自定义线程上运行代码。完成后,我希望这些线程通过Dispatcher
(System.Windows.Threading.Dispatcher
)调用回调(事件处理程序)。库用户应使用Dispatcher将事件处理分派给。
我们可以简单地在CoreApplication.MainView.CoreWindow.Dispatcher
上发送,但并非所有程序(例如Windows 10 IoT核心应用程序)都提供UI,因此它们没有主窗口。
用户是否可以简单地引用System.Windows.Threading.Dispatcher.CurrentDispatcher来获取他的帖子Dispatcher
?或者所有线程都不能拥有Dispatcher?
修改:此问题的更多背景信息。希望这使问题更容易掌握:https://github.com/getsenic/nuimo-windows/issues/2
答案 0 :(得分:1)
首先,我不确定你应该在UI线程上执行事件处理程序,因为只有客户端知道他是否需要访问UI元素。
第二,在调用matrix = [
['A', 'B', 'C', 'D'],
['E', 'F', 'G', 'H'],
['I', 'J', 'K', 'L'],
['M', 'N', 'O', 'P']
]
属性之前,您可以检查
node = 'K' # Input
# Get the matrix dimension
n = len(matrix)
m = len(matrix[0])
# Assume there is exactly one matching node
for i in xrange(n):
for j in xrange(m):
if matrix[i][j] == node:
x, y = i, j
(我不能确定它会起作用,因为目前我没有设备来测试它)。
而且你也可以用另一种方式解决这个问题:在你对象的构造函数中保存执行线程的SynchronizationContext然后用它来引发事件。如果您的对象从UI线程实例化(在大多数情况下它是真的),它将起作用。这样你就可以完全拒绝Dispatcher。
CoreApplication.MainView
答案 1 :(得分:0)
或者所有线程都不能有Dispatcher?
Dispatcher线程始终与UI线程绑定。 IoT无头模式应用程序没有UI,因此它没有Dispatcher线程。
用户是否可以简单地引用System.Windows.Threading.Dispatcher.CurrentDispatcher来获取其线程的Dispatcher
System.Windows.Threading.Dispatcher.CurrentDispatcher仅在旧版.NET平台中受支持。正如您所指出的,UWP替代方案是CoreApplication.MainView.CoreWindow.Dispatcher。
如果你想在Headless(没有GUI)模式下进行异步回调,你可以参考任务并行库(TPL),ContinueWhenAll ContinueWhenAny等API ......可能很适合你的需要。请参阅https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.aspx。