欢迎光临
我们一直在努力

EventMgr.Ins.GetEvent<VarChangedEvent>().Subscribe(OnVarChanged,

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 对象去用。

赞(0)
未经允许不得转载:171主机测评 » EventMgr.Ins.GetEvent<VarChangedEvent>().Subscribe(OnVarChanged,
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址