即使尝试使用 AutoCAD 也会崩溃
大家好,我正面临AutoCAD的崩溃,尽管使用了try方法,但这并没有帮助传递罪恶。有人能澄清一下吗?我知道罪魁祸首是OpenMode.ForRead,必须OpenMode.ForWrite.提前谢谢。public静态空隙change eFormatedMtext Value()。{。
文档文档=Application.DocumentManager.MdiActiveDocument;。
数据库db=doc.Database;。
编辑doc.Editor。
。
使用(事务tr=db.TransactionManager.StartTransaction())。
{。
尝试。
{。
PromptEntityOptions entOP=new PromptEntityOptions("\n选择格式化的Mtext以剥离:");。
entOP.AllowNone=false;。
entOP.AllowObjectOnLockedLayer=false;。
entOP.SetRejectMessage("\n必须选择Mtext");。
entOP.AddAllowedClass(typeof(MText), false);。
。
PromptEntityResult=ed.GetEntity(entOP);。
如果(ent.Status==PromptStatus.OK)。
{。
MTextmt=(MTexts)tr.GetObject(ent.ObjectId,OpenMode.ForRead);。
如果(mt!=null)。
{。
mt.Contentsmt.Text。
}。
}。
tr.Commit();。
}。
捕获(System.Exceptionexp)。
{。
tr.Abort();。
ed.WriteMessage(exp.Message);。
}。
}。
}。
。
**** Hidden Message ***** 你的帖子是相当混乱的:虽然你已经知道你需要使用OpenMode.ForWrite来修改打开的实体,但你仍然使用OpenMode.ForRead修改MText实体。你试过OpenMode.ForWrite?还是有一些原因让你认为你不能使用OpenMode.ForWrite?
顺便说一句,在你的情况下,测试打开的实体是否为空是没有必要的,因为
1.PromptStatus.OK意味着选择了一个有效的实体;
2.直接转换...=(MText)tr.GetObject(...只返回MText,如果转换成功,或者例外。如果转换失败(在你的情况下,它不会失败,因为选择设置为只允许选择MText!);它永远不会返回NULL。 谢谢,
我第一次写那个程序的时候忘记用OpenMode打开对象了。ForWrite并使用了OpenMode.forRead但令我惊讶的是,try块并没有将该错误传递给异常消息,导致AutoCAD崩溃,这让我想到,是什么导致try块没有获得该错误?我在这个论坛上提出这个问题是为了得到更多关于这个奇怪事情的解释。
感谢您对我检查对象Mtext是否不等于null的描述,真是太棒了。
编辑:更正了一个打字错误。 尝试...抓住。。。中的 AutoCAD API 进程不会捕获 AutoCAD 引发的某些异常。从我的经验来看,这是相当不可预测的。我的猜测是,由于.NET API主要是将包装器包装为原始C++API,因此,根据.NET API的实现方式,这种事情有时会发生。它可以被认为是AutoCAD .NET API的错误。但它可能是有意的,也可能是有意为之,来自那些实现.NET API的人,谁知道呢。我们有时不得不过这种事情。
页:
[1]