乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: Keith™

由于未引用对象而导致的 Autocad 崩溃

[复制链接]

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2020-4-2 22:57:23 | 显示全部楼层
我认为随着更多的背景,它现在变得越来越清晰。
我想你的意思是说“DocumentBecameCurrent事件
处理程序
从释放的表单触发”
引用的语句的问题在于DocumentBecameCurrent事件不是“来自”表单,而是被调度到“表单”,如果表单被释放,它应该在null事件处理程序方法上引发异常(但在这种情况下崩溃)。
同样,“事件调度程序”保持活动状态,“事件处理程序”与释放的表单一起运行。
同样,将事件处理程序替换为调度程序...
给定,注册到“调度程序”的事件“处理程序”由拥有事件处理程序方法的表单的句柄引用,但在释放时,表单在静态变量中变为 null。
没错,在包含变量的类变为 null 之前,变量不能超出范围,但是当该变量引用的表单变为 null(已释放)时,变量可能会变为 null。
基本上,文档正在将事件消息分派/发送到不再存在的表单。每个需要知道何时触发事件的“对象”都需要向在更高级别处理事件的对象(事件调度程序)注册自己的回调(事件处理程序)。正如 Daniel 所展示的,您可以对想要在事件发生时处理事件的对象执行此操作,但您必须在对象超出范围(释放)时取消注册它,以避免本主题的问题。
或者,您可以按照我的方式执行此操作,只需调用存储在静态变量上的任何对象,无论哪种方式,您都可以捕获事件并间接处理它。
也许是语义,但我认为这个问题现在更清楚了,希望能帮助将来遇到类似问题
的人
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2020-4-3 20:58:28 | 显示全部楼层
好的,是的,你是对的,处理程序是以被处置的形式,它是从其他地方提出的。显然不是形式。
无论如何,我已将处理程序移到窗体之外,并将其放入应用程序的静态类中。只要应用程序处于活动状态,处理程序就不会崩溃,因为我在调用所述对象中定义的公共函数之前检查了实际上是否存在空对象。
它有效,这是一个胜利!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 03:50 , Processed in 0.293649 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表