【问题标题】:Share data between static method and static event handler在静态方法和静态事件处理程序之间共享数据
【发布时间】:2012-07-24 04:17:38
【问题描述】:

我有一个验证某些 XML 的静态方法。为了验证 XML 并且不停止错误,它需要有一个静态回调 ValidationEventHandler 来处理错误事件(如果您不注册回调,任何错误都会引发异常并停止验证)。

因此,在此 ValidationEventHandler 中,您可以处理任何验证错误。静态验证方法读取 XML,对于任何错误事件,都会调用事件处理程序。

我的问题是,静态验证方法需要返回一个布尔标志来指示是否有任何错误,以及一个包含错误列表的输出参数字符串。但是由于错误处理是在 ValidationEventHandler 中完成的,因为验证方法是静态的,所以它必须是静态的,我如何保持事件处理程序中发生的错误的运行列表?

如果这些不是静态的,我只会创建一个实例变量来保存错误标志和错误字符串,但我不知道如何将数据从静态事件处理程序传递到执行处理的静态方法这会导致该处理程序发生事件。

有什么想法吗?

【问题讨论】:

  • 这一切听起来你不应该使用static方法和事件,它们应该是正常的,实例方法和事件。
  • 我不完全明白。首先,您说您的“静态验证方法”检测到错误。接下来你说错误处理是在 ValidationEventHandler 中完成的……把事情弄清楚,然后向我们展示你正在使用的代码。
  • 我想我误解了静态变量的工作原理,但它们对此工作得很好。

标签: c# .net event-handling


【解决方案1】:

如果我理解正确,您可以通过几种不同的方式来做到这一点

第一种方法是创建一个静态属性:

static bool HasErrors { get; set; }

void HandleErrorEvent(object sender, EventArgs e)
{
    HasErrors = true;
    // ... your logic here
}

另一个选项(这取决于您是否有权访问事件代码)是创建一个自定义 EventArgs

public ExceptionEventArgs : EventArgs
{
    public bool HasErrors { get; private set; }
    // Anything you else you want, like a list of error strings etc...
}

void HandleError(object sender, ExceptionEventArgs e)
{
    e.HasErrors = true;
    // ... your logic here
}

void Validate()
{
    var eventArgs = new ExceptionEventArgs()
    OnHandleError(this, eventArgs);
    if(eventArgs.HasErrors)
        // do something special
}

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多