我相信我在某处读到在WinRT中触发UI事件的顺序是任意的。我也相信我读到它与Silverlight和/或WPF不同,当然还有WinForms。它的方式不同,在WinForms中,您可以确定,例如,在GotFocus之后触发Button的Click事件等等(示例可能不正确)。在WinRT你不能。我自己做了一些原油测试,看起来是正确的。有时事件X首先触发,有时是Y.
任何人都可以为我确认这些假设,特别是关于Silverlight和WPF,我不是很熟练吗?最好有微软官方文章的链接。
我认为这是一个需要掌握的重要概念,因为它会影响事件处理程序中您能做什么和不能做什么 - 特别是在与数据绑定属性同步方面。
答案 0 :(得分:0)
WinRT是对操作模型的完全重新定义。不要让那些话吓到你。这意味着,曾经有过同步动作的地方,它们已被转变为异步动作。
这意味着,假设一个事件可能在另一个事件之前触发,那么你是正确的。使用预构建的WinRT控件,没有太多可以用来同步异步,但是使用自定义代码,您可以实现调用和响应模式。
我在博客中介绍了Event Aggregator,它允许从应用中的任何位置发布和订阅事件:
http://developingzack.blogspot.com/2012/09/what-why-and-how-event-aggregator.html
通过创建一组事件,原始事件订阅者发布第二个事件,第二个事件订阅发布第三个事件...到第N个层。
这也是一种解耦方式,可以创建同步方法的错觉(和操作顺序)。
每个可能需要超过50毫秒才能响应的方法已被重写为异步。
以下是MSDN博客中对Async的一个相当详细的解释:http://blogs.msdn.com/b/windowsappdev/archive/2012/06/14/exposing-net-tasks-as-winrt-asynchronous-operations.aspx