我正在寻求架构建议,以及更深入地了解委托和Lambda表达式(除了需要修复一个真正的问题!)
我们通过PDA上的串口与设备(秤)交互的代码。我们连接视图以从设备接收数据。由于一次只有一个视图“连接”到我们的比例实例,因此我们使用类型为Action的属性来处理比例实例和视图之间的交互(而不是订阅事件)。然后,视图将该属性设置为从比例中获取值并修改UI的Lambda。
我们目前遇到的问题是在视图Dispose时。如果比例当前正在发送数据(并且我们在Action处理程序内部),当用户关闭视图时(此时我们强制执行Dispose,因为我们正在使用CF),应用程序会挂起:Action Lambda永远不会完成运行,并且在尝试关闭SerialPort时,比例实例的Dispose也会挂起。
1. 在这种情况下,类上的Action属性在处理方式上是否与事件有关键区别? 2. 根据日志详细信息,当视图调用Dispose时,代码位于Action Lambda内部(它修改了一些UI元素)。这两者都在UI线程上--它们怎么可能同时运行?昨晚我没有睡够吗? 3. 是否有任何人看到了一些不良的架构决策,应进行更正?
谢谢。如果描述不够清楚,我可以尝试在这里放一些代码示例。
我们通过PDA上的串口与设备(秤)交互的代码。我们连接视图以从设备接收数据。由于一次只有一个视图“连接”到我们的比例实例,因此我们使用类型为Action的属性来处理比例实例和视图之间的交互(而不是订阅事件)。然后,视图将该属性设置为从比例中获取值并修改UI的Lambda。
我们目前遇到的问题是在视图Dispose时。如果比例当前正在发送数据(并且我们在Action处理程序内部),当用户关闭视图时(此时我们强制执行Dispose,因为我们正在使用CF),应用程序会挂起:Action Lambda永远不会完成运行,并且在尝试关闭SerialPort时,比例实例的Dispose也会挂起。
1. 在这种情况下,类上的Action属性在处理方式上是否与事件有关键区别? 2. 根据日志详细信息,当视图调用Dispose时,代码位于Action Lambda内部(它修改了一些UI元素)。这两者都在UI线程上--它们怎么可能同时运行?昨晚我没有睡够吗? 3. 是否有任何人看到了一些不良的架构决策,应进行更正?
谢谢。如果描述不够清楚,我可以尝试在这里放一些代码示例。