我的应用程序使用各种.dll与另一软件(Catia V6 / 3DEXPERIENCE)对话。
此界面中的某些功能似乎异步运行,这偶尔会导致脚本失败。
“ AnyObject”和“ Selection”类型以及它们的功能均来自.dll。 “ IsolateThis”功能已嵌入我自己的类中。
public INFITF.AnyObject IsolateThis(INFITF.AnyObject thing)
{
Selection osel = catapp.ActiveEditor.Selection; //get a selection object
osel.Clear(); //make sure nothing pre-selected
osel.Add(thing); //add item to be copied to selection
osel.Copy(); //copy
osel.Clear(); //clear selection
osel.Add(this.hbod); //add item to paste into
osel.Paste(); //paste
this.part.Update(); //update the parent object
return (INFITF.AnyObject)osel.Item(1).Value; //return pasted result
}
该函数基本上会复制一个对象,然后将其粘贴到另一个对象中,然后返回生成的粘贴对象。选择对象足够友好,可以进行更新,使其仅在粘贴后包含粘贴的内容,这就是为什么最后一行有效的原因。
出于某种原因,当我单步执行代码时会很好,但是如果我尝试在其他地方实时使用返回的对象,那么我有时会收到无效的强制转换异常,例如以下内容行:
CATCurve tmpcurve = new CATCurve((HybridShapeCurveExplicit)tmpbody.IsolateThis(this.Branch.shape));
当我按下F10继续时,哪个不会再次出现。我的怀疑是,它向Catia发出了粘贴命令,这需要时间才能完成,但是我在不响应的情况下继续进行其余代码。这会导致返回错误的对象(因为'this.hbod'仍被视为所选对象,与预期的返回对象不兼容)。
我该如何包装/重构以确保粘贴和更新操作已完全完成?从外部引用中提取的东西甚至有可能吗?
我还是C#的新手。我曾尝试研究使用“任务和流程”,但是老实说,在这种情况下如何实现它们却一无所知。