枚举 AcSmSheet 列表时的 CTD
大家好。正如主题所述,我在枚举已构建的AcSmSheet列表时遇到了崩溃到桌面(AutoCad)的情况。通过CTD,我的意思是它甚至跳过了致命错误对话框。我试图理解这种行为,因为它对我来说很奇怪,几个月来我一直试图确定问题的根源,但无济于事。如果我的解释很长,我很抱歉,但我希望更多的信息能帮助我们解决问题。我有一个表单,允许用户选择所需的图纸集文件并管理要在图纸上运行的任务。它循环访问并收集 AcSmSheets、IAcSmSheets2,并提取文件路径、修订数据、文件名、布局名称,并将它们全部存储在自己的列表中。我可以在表单中枚举AcSmSheets列表,并使用
foreach (AcSmSheet sh in SheetSet.smSheets)
{
string path = sh.GetLayout().GetFileName();
if (!string.IsNullOrEmpty(path))
{
label1.Text += path + "\n";
checkedListBox1.Items.Add((object)path, true);
//OpenDoc(path); //alternatively, run these methods
//Task(mode);
//CloseDoc(path);
}
}
列出所有文件路径,这按预期工作,并且它正确返回文件路径。伟大。现在我被引导(错误地)相信我的代码应该正常工作。
在另一个类中,我想获取相同的数据并对其进行迭代,从文件路径中打开每个dwg以运行某些任务并保存并关闭。
我将在窗体之外使用相同的代码,并且它不起作用。它将进入 foreach 循环,获取第一个路径,打开,执行任务,保存并关闭,移动到下一个枚举,并在“字符串路径 = sh.GetLayout().GetFileName();“ 行.在一个实例中,它正确地获取所有文件路径。在另一个实例中,它只得到第一个。
我的理解是,当autocad尝试评估空值时,它将进行CTD。我想知道在第一个.dwg打开后,数据是否被丢弃了,但事实并非如此。我正在使用CommandFlags.Session,并且已经找到了一种使代码工作的替代方法,但它并不理想。如果我使用相同的代码,但使用
foreach (string path in SheetSet.pathList)
{...}
,它的工作原理,但这只允许我枚举路径,当我想处理的不仅仅是路径(修订数据,布局信息)时。
因此,在打开文档时不会清除数据。是什么让 AcSmSheet 变为 null(如果是的话)?
提前感谢任何回复。
**** Hidden Message *****
页:
[1]