Здравствуйте.
В Civil 3D используются данные из Oracle через FDO соединение. Система ориентирована на совместную работу. Необходимо автоматизированно обновлять в окне чертежа изменения, произошедшие у других пользователей.
Если использовать следующий код и вызывать его вручную с помощью команды, то, в основном, все работает.
[CommandMethod("MANREFRESH")]
public void man_refresh()
{
AcMapMap currentMap = AcMapMap.GetCurrentMap();
MgLayerCollection LayerCol = currentMap.GetLayers();
for (int i = 0; i < LayerCol.Count; i++)
{
MgLayerBase currentLayer = LayerCol.GetItem(i);
currentLayer.ForceRefresh();
}
Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.Regen();
}
Если же тот же самый код запускать из dll по таймеру или с помощью уведомления через socket, то получаем ошибку:
>> System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Если убрать Regen(), то получаем пустое окно чертежа. В этом случае объекты вернуть можно, вручную щелкая правой кнопкой мыши по слоям Oracle и выбирая "Обновить слой".
Может кто знает в чем может быть проблема, или есть альтернативные способы обновления данных?