繁体   English   中英

如何在ac#类中公开事件?

[英]How to expose an event in a c# class?

我正在构建一个简单的类来容纳相关方法。 此代码的一部分包括同步到数据库。 内置的SyncOrchestrator类包含一个SessionProgress事件处理程序,我可以将一个事件连接到该事件处理程序。

我想做的是实例化我的类,然后将一些代码连接到该事件,以便我可以显示进度条(不使用BGWorker)。

因此,我的问题可能是c#101,但是如何以正确的方式通过班级公开此事件,以便进行连接?

谢谢

我认为您正在寻找这样的东西:

(我还建议您阅读MSDN上的“ 事件”教程 。)

public class SyncOrchestrator
{
    // ...

    public event EventHandler<MyEventArgs> SessionProgress;

    protected virtual void OnSessionProgress(MyEventArgs e)
    {
        // Note the use of a temporary variable here to make the event raisin
        // thread-safe; may or may not be necessary in your case.
        var evt = this.SessionProgress;
        if (evt  != null)
            evt (this, e);
    }

    // ...
}

MyEventArgs类型是从EventArgs基本类型派生的,其中包含您的进度信息。

您可以通过调用OnSessionProgress(...)从类中引发事件。

通过执行以下操作,在任何使用者类中注册事件处理程序:

// myMethodDelegate can just be the name of a method of appropiate signature,
// since C# 2.0 does auto-conversion to the delegate.
foo.SessionProgress += myMethodDelegate;

同样,使用-=取消注册该事件; 通常没有明确要求。

像这样:

public event EventHandlerDelegate EventName;

很明显, EventHandlerDelegate应该是您希望人们提供给事件处理程序的委托类型的名称,如下所示:

anObject.EventName += new EventHandlerDelegate(SomeMethod);

调用事件时,请确保使用以下模式:

var h = EventName;
if (h != null)
    h(...);

否则,您可能会在测试和实际调用事件之间使事件处理程序变为null

另外,请参阅MSDN上官方文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM