EventMgr.Ins.GetEvent().Subscribe(OnVarChanged
简而言之,就是当前模块可能链接的上游模块的变量,可能被多个下游模块链接,我要上游模块单独给我。
全局变量变化时,只把发给我的消息转给我,我来更新 InputImageLinkText
这根线连接了 5 个环节
① 用户点击"链接"按钮 → 发出自己是谁
LinkCommand 触发 → 发布 OpenVarLinkViewEvent
参数: $"{ModuleGuid},InputImageLink"
↑ ↑
"我来收" "收哪个口"
比如 GUID 是 abc123,发布的就是 "abc123,InputImageLink"。
② 用户在弹窗里选了一个上游变量
比如选了"采集图像"模块的输出变量 输出图像,系统记录链接关系:
下游: abc123 的 InputImageLink 口
上游: &采集图像.输出图像
③ 上游模块运行结束 → 广播变量变化
上游模块输出新图像后,发布 VarChangedEvent,SendName 会带上所有链接了它的下游模块 GUID:
SendName = "abc123,InputImageLink"
LinkName = "&采集图像.输出图像"
④ Subscribe 的过滤器起效
o => o.SendName.StartsWith($"{ModuleGuid}")
全局可能有 10 个模块都订阅了这个事件,但只有 GUID 为 abc123 的模块,SendName 才以 "abc123" 开头 → 过滤器放行,其余 9 个直接丢弃。
⑤ OnVarChanged 接收并存储
switch (obj.SendName.Split(',')[1]) // 取到 "InputImageLink"
{
case "InputImageLink":
InputImageLinkText = obj.LinkName; // 存下 "&采集图像.输出图像"
break;
}
一句话
OnVarChanged 不是主动去拉数据,而是等着上游推过来。那行 Subscribe 就是告诉事件总线:“全局变量变化时,只把发给我的消息转给我,我来更新 InputImageLinkText”。
等到 ExeModule() 执行时,GetDispImage(InputImageLinkText) 再把这个 "&采集图像.输出图像" 字符串解析成真正的 HImage 对象去用。





