You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ErrorMsg事件处理中获取触发事件的Machine实例?

解决事件触发时获取Machine实例的问题

有两种实用方式可以让你在事件处理方法中拿到触发事件的Machine实例:

方法一:用Lambda表达式包装事件处理逻辑

在绑定事件时,通过Lambda捕获当前循环中的Machine实例,再传递给处理方法:

for (int iii = 1; iii <= pcdApplication.Machines.Count; iii++)
{
    Machine machine = pcdApplication.Machines.Item(iii);
    machineList.Add(machine);
    // 用Lambda捕获当前machine,再调用处理方法
    machine.ErrorMsg += (msg, errorType) => Machine_ErrorMsg(machine, msg, errorType);
}

然后修改事件处理方法的签名,增加Machine参数:

private void Machine_ErrorMsg(Machine sender, string Msg, int ErrorType)
{
    // 这里可以直接使用sender的属性,比如 sender.Id、sender.Name 等
    ... 
}

方法二:修改事件定义(如果有权限)

如果你能修改ErrorMsg事件的定义,建议遵循.NET事件的标准模式,把触发实例作为第一个参数:

// 重新定义事件(如果允许)
public event Action<Machine, string, int> ErrorMsg;

// 触发事件的地方调整为
ErrorMsg?.Invoke(this, msg, errorType);

这样原有的绑定方式无需修改,直接在处理方法中拿到触发实例:

private void Machine_ErrorMsg(Machine sender, string Msg, int ErrorType)
{
    ... 
}

注意:如果无法修改事件定义,优先使用方法一,这是无需改动原有事件结构的快捷方案。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:15