NetLogic 生命周期
了解
FactoryTalk Optix
如何管理 NetLogic 线程、Start、Stop、ExportMethod 执行和任务线程处理,以确保代码可靠。有关代码示例和高级用法,请参见 FactoryTalk Optix NetLogic 参考手册。执行上下文和线程
FactoryTalk Optix Runtime
包括两个主要执行上下文:UI 线程和行为线程。UI 线程渲染图形对象并处理用户输入。行为线程按顺序调用行为(包括 NetLogic)上的 Start()
和 Stop()
方法。这些线程独立运行。有关运行时池、专用线程和调度行为的更多信息,请参见运行时线程处理模型。
Start 和 Stop 方法生命周期
当节点(页面、对象、小组件)激活时,运行时将调用
Start()
方法。运行时在行为线程上按顺序逐个调用每个 Start()
方法。较深的节点会先于其父节点启动。如果多个 NetLogic 处于相同深度,它们的顺序遵循树遍历,但这不是确定的。运行时在行为线程上以与
Start()
完全相反的顺序按顺序调用 Stop()
方法。运行时会在 Stop()
中记录异常,且不会中断该序列。在 Stop()
之后,运行时会丢弃 NetLogic 实例。
警告:
请勿在运行时 NetLogic 的
Start()
方法中向页面树添加节点或从中移除节点。如果需要动态修改该树,请更改页面类型定义并在会话中加载页面。
小贴士:
如果
Start()
方法耗时超过 2000 ms,运行时会记录警告。缓慢的 Start()
方法会延迟后续的 NetLogic 初始化,并可能导致页面加载期间出现明显卡顿。在页面导航过程中,运行时可能会在调用新页面上的 Start()
后调用先前页面上的 Stop()
。如果页面共享全局或外部资源,则这种重叠可能会导致意外行为。ExportMethod 执行和线程安全
带有
[ExportMethod]
修饰的方法会在触发它们的线程上同步运行。线程取决于触发源:UI 线程、行为线程或专用任务线程。当 [ExportMethod]
在与拥有共享变量的线程不同的线程上运行时,可能会发生并发访问。使用锁定来保护共享数据。任务类型和线程用法
FactoryTalk Optix
支持多种用于异步操作的任务类型:- LongRunningTask:专用线程,对信息模型进行线程安全访问,用于长期运行或阻塞性操作。
- PeriodicTask:专用线程,线程安全访问,用于重复性工作。
- DelayedTask:专用线程,线程安全访问,用于一次性延迟操作。
- async/await(C#):使用 ThreadPool,对信息模型的访问不是线程安全的,用于纯计算或不访问节点的 I/O。
小贴士:
所有
FactoryTalk Optix
任务类型都对信息模型安全。async/await
或 Task.Run
仅用于不访问项目节点的操作。有关更多信息,请参见运行异步代码。
NetLogic
lifecycle
threading
Start method
Stop method
ExportMethod
LongRunningTask
PeriodicTask
DelayedTask
提供反馈