在静态方法和静态事件处理程序之间共享数据

时间:2012-07-23 20:02:30

标签: c# .net event-handling

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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
}