C#如何等待外部代码完成

时间:2018-11-09 10:41:40

标签: c# visual-studio-2010 catia

我的应用程序使用各种.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#的新手。我曾尝试研究使用“任务和流程”,但是老实说,在这种情况下如何实现它们却一无所知。

0 个答案:

没有答案