乐筑天下

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

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

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2020-4-1 21:12:44 | 显示全部楼层 |阅读模式
这是另一个头脑。
我有一个形式c

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2020-4-1 22:13:55 | 显示全部楼层
这就是我对类似的情况下,汉族
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2020-4-1 22:41:25 | 显示全部楼层
你创建的事件如何?形式?如果y
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2020-4-1 23:05:02 | 显示全部楼层

在窗体中,但是现在我已经查看了MickD提供的示例,我想我应该将它移到commandmethod中。这将确保只有一个事件处理程序,并且设置bool可以防止多个处理程序。
谢谢你的想法...现在看看这是否能解决我的问题。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2020-4-2 02:25:13 | 显示全部楼层
嗨,也许我误解了这个问题,但是在我看来,总是在使用后处理模式对话框更安全,你可以从对话框实例的属性中获取数据,并将它们作为静态成员存储在包含CommandMethod的类中,这样就可以在绘图之间访问它们。这是一个带有某种输入框的极简示例,Dilaog类:   使用系统。Windows . Forms。

命名空间分隔OfConcernSample。
{。
公共分部类DialogBox : Form。
{。
公共字符串Data1 => textBox1,文本;。

公共对话框(字符串数据1)。
{。
initialize component();。
textBox1,Text = data1。
}。
}。
}。
命令类:   使用Autodesk,AutoCAD . Runtime。

使用系统,Windows . Forms。

使用AcAp = Autodesk,AutoCAD . application services . application;。

命名空间分隔OfConcernSample。
{。
公共类命令。
{。
静态字符串data1 =。

[command method(" INPUT ")]。
公共静态void InputCmd()。
{。
使用(var dialog = new dialog box(data1))。
{。
if (AcAp,ShowModalDialog(dialog)= = dialog result,好)。
{。
data1 =对话框,数据1;。
}。
}。
}。

[command method(" OUTPUT ")]。
公共静态void OutputCmd()。
{。
AcAp,ShowAlertDialog(data1);。
}。
}。
}。

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2020-4-2 05:26:43 | 显示全部楼层
我会尝试这个,这样形式就拥有了反应器公共分部类MyForm:Form。
{。
公共 MyForm()。
{。
InitializeComponent();。
Bricscad.ApplicationServices.Application.DocumentManager.。
文档当前 += DocumentManager_DocumentBecameCurrent;。
}。

private void DocumentManager_DocumentBecameCurrent(object sender, Bricscad.ApplicationServices.DocumentCollectionEventArgs e)。
{。
//。
}。
}。
和 partial class MyForm。
{。
/// 。
必需的设计器变量,。
/// 。
private System.ComponentModel.IContainer components = null;。

/// 。
清理正在使用的任何资源,。
/// 。
如果应释放托管资源,则为 true;否则为 false。。
受保护的覆盖 void Dispose(bool disposing)。
{。
if (disposal && (components != null))。
{。
Bricscad.ApplicationServices.Application. 。
DocumentManager.DocumentBecameCurrent -= DocumentManager_DocumentBecameCurrent; //。

组件,处置();。
}。
基础,处置(处置);。
}。

#region Windows 窗体设计器生成的代码。

/// 。
设计器支持所需的方法 - 不修改。
/// 此方法的内容与代码编辑器,。
/// 。
private void InitializeComponent()。
{。
this.components = new System.ComponentModel.Container();。
这,AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;。
这,ClientSize = new System.Drawing.Size(800, 450);。
这,文本 = “MyForm”;。
}。

#endregion。
}。

回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2020-4-2 08:11:33 | 显示全部楼层
是的,你可以。
如果你想要存储的数据
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2020-4-2 17:24:52 | 显示全部楼层
不论真假,我发布的代码已经被我们
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2020-4-2 19:02:11 | 显示全部楼层

实际上,当窗体关闭时,我会在窗体上强制一个dispose。事件处理程序不释放,但几乎所有其他变量和控件都释放。我相信这是因为它是静态的。
问题是当窗体被释放时,事件处理程序仍然是活动的。我通过在关闭时抓住窗户的把手来确定这一点。在释放窗体并重新初始化一个新窗体后,事件处理程序给了我已释放窗体的句柄,而不是当前窗体的句柄,尽管窗体已被释放并且错误处理程序已在窗体中定义。
好的,所以我实际上没有在绘图之间存储数据。我正在处理几幅图中的数据。几乎所有东西都是作为调色板构建的。打开、关闭或激活图纸应强制应用程序从当前图纸中读取某些数据,并通过将其放入另一张图纸的选项显示出来,或者在一个函数的情况下,如果满足某些标准,更改一张图纸中的属性值将提示在另一张打开的图纸中进行更新。
因此,我的问题的解决方案是将事件处理程序移到带有commandmethods的类中,然后在那里处理事件。当应用程序卸载时,无论打开还是关闭的绘图,该类都会被释放。这解决了我的问题。
最后,我认为问题在于,一旦在静态类中定义了变量,这些变量显然不会因为保存它们的窗体被释放而超出范围。不过,现在它开始工作了。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2020-4-2 19:44:45 | 显示全部楼层

有趣的是,你真的尝试过在处置时移除反应堆吗?无论如何,如果您的表单没有被处理,那么您可以在FormClosing上卸载反应器。
DocumentManager.DocumentBecameCurrent -= DocumentManager_DocumentBecameCurrent.
MickDs Static也可以工作。
我一直使用这种模式
  1. Class
  2. {
  3.   Class()
  4.   {
  5.      Load reactor
  6.   }
  7.   ~Class()
  8.   {
  9.      Unload reactor
  10.   }
  11. }

回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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