Тема: Зависание внешнего ПО при вызове диалога TDMS (C#)
Описание проблемы: при вызове диалога TDMS из формы внешнего ПО происходит зависание как формы/диалога TDMS, так и окна внешнего ПО. Это связано с отсутствием встроенных средств переключения пользовательского управления для данной задачи.
Решить проблему можно следующим образом: принудительно запретить элементу управления форме внешнего ПО отвечать на управление со стороны пользователя на время работы с диалогом TDMS. При этом необходимо принудительно вернуть управление элементу при закрытии диалога любым из доступных способов.
///диалог TDMS создан ранее в программе TDMSSelectObjectDlg SelObjDlg; //текущая форма внешнего ПО Form Active = this.FindForm(); //отображает окно поверх текущего SelObjDlg.ParentWindow = Active.Handle.ToInt32(); //переводим фокус пользовательского управления, без этого диалог зависает Active.Enabled = false; //отображает диалог bool RetVal = SelObjDlg.Show(); ///возвращает GUID отдела (по "ОК") if (RetVal) { //возвращаем управление внешним ПО Active.Enabled = true; return SelObjDlg.Objects[0].GUID; } //возвращаем управление внешним ПО при любом другом выходе из диалога Active.Enabled = true; return null;