Мое приложение общается с другим программным обеспечением (Catia V6 / 3DEXPERIENCE), используя различные .dll.
Некоторые функции в этом интерфейсе работают асинхронно, что иногда приводит к сбоям в моем сценарии.
Типы «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
}
Функция в основном копирует один объект, вставляет его в другой и возвращает полученный вставленный объект. Объект Selection достаточно любезен для обновления, чтобы содержать вставленную вещь только после вставки, поэтому последняя строка работает.
По какой-то причине это нормально, когда я выполняю код, но если я пытаюсь использовать возвращенный объект в другом месте в реальном времени, тогда я иногда получаю недопустимое исключение приведения, например, в следующей строке :
CATCurve tmpcurve = new CATCurve((HybridShapeCurveExplicit)tmpbody.IsolateThis(this.Branch.shape));
Что не повторяется, когда я нажимаю F10, чтобы продолжить. Я подозреваю, что она запускает команду вставки в Catia, которая требует времени для завершения, но обрабатывает остальную часть моего кода, не требуя ответа. В результате возвращается неправильный объект (поскольку this.hbod по-прежнему рассматривается как выбранный объект, который не совместим с ожидаемым возвращаемым объектом).
Как мне это обернуть / изменить, чтобы убедиться, что операции вставки и обновления полностью завершены? Возможно ли это даже для вещей, взятых из внешних ссылок?
Я все еще довольно новичок в c #. Я пытался использовать Task и Process, но, если честно, я совершенно заблудился, как их реализовать в этой ситуации.