与WinForms,SL和WPF相比,WinRT中的UI事件顺序

时间:2012-09-28 11:48:45

标签: wpf silverlight winrt-xaml

我相信我在某处读到在WinRT中触发UI事件的顺序是任意的。我也相信我读到它与Silverlight和/或WPF不同,当然还有WinForms。它的方式不同,在WinForms中,您可以确定,例如,在GotFocus之后触发Button的Click事件等等(示例可能不正确)。在WinRT你不能。我自己做了一些原油测试,看起来是正确的。有时事件X首先触发,有时是Y.

任何人都可以为我确认这些假设,特别是关于Silverlight和WPF,我不是很熟练吗?最好有微软官方文章的链接。

我认为这是一个需要掌握的重要概念,因为它会影响事件处理程序中您能做什么和不能做什么 - 特别是在与数据绑定属性同步方面。

1 个答案:

答案 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