警告 CA2000 在丢失作用域之前释放对象
我收到了处置警告,我已经验证了该对象确实已被处置,但我仍然收到了警告。我错过什么了吗私有void OptionsForm(){
选项表单对话框=新选项表单
dialog.ShowDialog()
如果(!dialog.IsDisposed){
对话框.Dispose()
}
}
此外,还有调用此函数的代码。Close(),理论上应该处理表单。
我尝试将代码包装在一个try-catch中,但错误只是说“对话框未沿所有异常路径处理”。
将代码更改为此似乎满足了错误:
private void OptionsForm(){
使用(dialog=newoptionsform){
dialog.ShowDialog()
}
}
这不是我看到这个问题的唯一形式。所有表格都有类似的错误。这是一系列需要修改的程序,以满足这只野兽的需要。
**** Hidden Message ***** 怎么样在尝试,抓住,最后? 嗨,假设您从AutoCAD调用此方法,您应该使用Application。ShowModalDialog或应用程序,ShowModelessDialog而不是Form.ShowDialog.正如nullptr所说,using语句是一种try的包装...(接住)...最后。 private void option form()。
{。
使用(var dialog = new options form())。
{。
欧特克,AutoCAD . application services . application . showmodaldialog(对话框);。
}。
}。
除了gile所说的…
调用Form.Close()与表单本身的结果不同,这取决于表单的显示方式:
当表单显示为无模式时,即Autodesk.AutoCAD.ApplicationServices.Application.ShowModelsDialog()/Forms。Show(),Close()方法不仅可以可视地关闭表单,还可以处理表单。
当表单显示为对话框/模态时,即Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog()/form。ShowDialog(),Close()方法只可视地关闭表单,而不处理表单。也就是说,对模态表单的Close()调用等同于form.Hide()/form.Visible=False。必要时,表单调用代码负责处理显示为对话框的表单。这就是为什么通常的做法是在“使用…”块中包装对话框窗体,但不是非模态窗体。
顺便说一句,在大多数情况下,如果使用非模态窗体,则在AutoCAD中。如果不是全部,表单将被创建为单例对象(即静态实例),并且它的FormClosing甚至会被处理以取消表单关闭;相反,我们在事件处理程序中将其Visible设置为False。因此,对于用户来说,表单是关闭的。但是表单实例仍然存在于内存中,可以在需要时设置为可见。典型的例子是调色板集。 模态形式没有问题。我可以将它们包装在using语句中,以确保它们被释放。我担心的是非模态的。因为代码在form.show()调用后继续执行,所以调用函数将无法释放该对象,因为它很快就会超出范围。如果使用Autodesk。AutoCAD . application services . application . showmodelessdialog()解决了这个问题,这可能是我需要走的路。
使用Autodesk打开模态表单的好处是什么?AutoCAD . application services . application . showmodaldialog(),特别是当它们不直接与文档交互时?
在注册表中存储大小和位置
我认为,模态窗体(对话框)可能是AutoCAD加载项最常用的用户界面。大多数应用程序在某些时候需要用户输入,进一步的执行将依赖于用户输入,因此对话框会阻塞执行,直到用户输入完成。
OTH,使用非模态表单使事情变得相当复杂,尤其是当表单显示与特定文档相关的数据时,因为AutoCAD本身是一个多文档环境,并且活动文档可以由于多种原因而改变,因此需要相应地同步非模态表单中显示的内容。这就是为什么在我之前的回复中,我提到了创建一个单例/静态表单是很常见的,如果你想让它成为无模式表单的话。我在这里有更多关于无模式表单的讨论:
http://drive-CAD-with-code . blogspot . ca/2014/02/showing-and-closing-modeless-form dialog . html
直接从AutoCAD调用“我的表单”时,将在当前文档的当前空间中工作。交换文档也会导致应用程序交换文档。我仍然需要解决一些问题,但在很大程度上,这是因为它的实现方式。任何操作都不会导致用户更改图形或布局选项卡,从而存在应用程序在错误布局中运行的任何危险<无论如何,我已经解决了这个问题。对于直接在AutoCAD中创建的表单,我将酌情使用ShowModalDialog()/ShowModelessDialog()调用。我将继续让应用程序处理这些表单的子表单。这主要是因为我不需要在其中引用AutoCAD部件,因为它们不使用它们,而且它们是独立的项目,不需要对各种版本的AutoCAD进行特殊处理。
页:
[1]