# COM API缓存同步问题记录

## 问题描述

### 现象
在使用物流属性修改功能时，发现以下问题：
1. 通过COM API成功修改模型属性后，物流模型列表没有显示最新的属性值
2. 列表仍然显示修改前的旧属性值
3. 在Navisworks主界面的属性窗口中能看到正确的新属性值

### 日志证据
```
[2025-06-22 11:52:06.164] [INFO] 已成功修改模型 ASPHALT.02 的物流属性为 障碍物
[2025-06-22 11:52:08.527] [COM API读取] 模型: ASPHALT.02, 属性: 类型, 值: 通道
```
**关键发现**：COM API写入"障碍物"成功，但读取时仍然返回旧值"通道"

## 问题分析

### 根本原因
Navisworks的COM API内部存在**写入和读取之间的缓存同步延迟**问题：
- COM API写入属性成功
- 但COM API读取时仍然使用缓存的旧数据
- .NET API可能使用不同的缓存机制，所以主界面属性窗口显示正确

### 影响范围
- 物流属性修改后，列表刷新显示旧值
- 用户体验：修改成功但界面显示不正确
- 功能正确性：实际属性已正确修改，只是显示问题

## 尝试的解决方案

### 方案1：创建COM API专用读取方法 ❌
**实施**：创建`GetLogisticsPropertyValueViaCom`方法，使用COM API直接读取属性
**结果**：仍然读取到旧值，证明问题在COM API内部缓存

### 方案2：修改GetGUIPropertyNode参数 ❌
**实施**：将`GetGUIPropertyNode(path, true)`改为`GetGUIPropertyNode(path, false)`
**依据**：Autodesk论坛最佳实践，避免加载内部属性
**结果**：问题依然存在

### 方案3：事件机制和文档刷新 ✅部分有效
**实施**：
- 属性修改后触发事件
- 强制刷新文档状态
- 自动刷新物流模型列表
**结果**：事件机制工作正常，但读取的仍是旧值

## 待尝试的解决方案

### 方案4：延迟读取
```csharp
// 属性修改后添加延迟
await Task.Delay(100);
// 然后再读取属性
```

### 方案5：强制COM API状态刷新
```csharp
// 强制刷新COM API状态
ComApi.InwOpState10 state = ComApiBridge.State;
// 可能需要调用特定的刷新方法
```

### 方案6：混合API方案
- 写入：使用COM API
- 读取：使用.NET API + 强制缓存清理

### 方案7：重新查询整个文档
- 修改后重新遍历整个文档树
- 而不是依赖缓存的属性值

## 临时解决方案

### 当前状态
- 属性修改功能正常工作
- 实际属性值已正确保存
- 事件机制和选择状态保持正常
- 唯一问题：列表显示的是旧值

### 用户使用建议
1. 修改属性后，可以在Navisworks主界面属性窗口确认修改成功
2. 重新打开控制面板会显示正确的属性值
3. 功能本身是正确的，只是显示同步问题

## 技术细节

### 相关代码位置
- `CategoryAttributeManager.cs`: `GetLogisticsPropertyValueViaCom`方法
- `MainPlugin.cs`: `RefreshLogisticsModelListStatic`方法
- 事件处理：`OnLogisticsAttributeChanged`方法

### 调试日志
已添加详细的COM API读取日志：
```csharp
LogManager.WriteLog($"[COM API读取] 模型: {item.DisplayName}, 属性: {propertyName}, 值: {value}");
```

## 后续计划

1. **优先级**：中等（功能正确，但用户体验有影响）
2. **调研方向**：
   - 研究Navisworks COM API缓存机制
   - 查找更多Autodesk论坛解决方案
   - 尝试延迟读取和强制刷新方案
3. **替代方案**：如果COM API问题无法解决，考虑改用.NET API进行读取

## 参考资料

- [Autodesk论坛：User-defined sections "very slow creation"](https://forums.autodesk.com/t5/navisworks-api-forum/api-user-defined-sections-quot-very-slow-creation-quot/td-p/5826185)
- Navisworks API最佳实践：避免`GetGUIPropertyNode(path, true)`
- COM API和.NET API缓存同步问题讨论

---
**创建时间**：2025-06-22  
**最后更新**：2025-06-22  
**状态**：待解决  
**优先级**：中等 