是否有必要将每次调用都发送到 Navigate?

Is it necessary to dispatch every call to Navigate?

我在我的 Universal Windows 8.1/Windows Phone 8.1 应用程序中导航使用:

((Frame)Window.Current.Content).Navigate()

用户在导航时报告了一些崩溃。第三方日程安排组件尤其严重,每次有人从它导航(通过单击约会)到另一个页面时,它几乎崩溃。

供应商告诉我们也将导航包装在调度程序中。

Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { `((Frame)Window.Current.Content).Navigate() });`

这确实完全消除了有关进度控制的错误。现在判断导航是否在每种情况下都得到改善还为时过早。它有一个严重的缺点,即人们仍然可以在短时间内与元素进行交互,直到现在发生导航。

这是最佳实践吗?真的有必要吗?还是特殊情况?

此外,当我们尝试使用 HasThreadAccess 将分派的调用限制为应该需要的调用时,崩溃仍然发生。

默认情况下,所有 XAML 及其代码隐藏都由主线程(UI 线程)拥有。此外,不需要分派在主线程上创建的任何对象。您看到的问题很可能是由试图调用 UI 线程进行导航的后台 thread/task 引起的。