c# - 如何在 C# 类中公开事件?

标签 c# events

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

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

所以,我的问题可能是 c# 101,但我如何通过我的类以正确的方式公开此事件,以便我可以将其连接起来?

谢谢

最佳答案

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

(我还建议您阅读 Events tutorial on 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;

同理,使用-=注销事件;通常没有明确要求。

关于c# - 如何在 C# 类中公开事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138372/

相关文章:

c# - 添加对 Office 库的引用失败 : type or namespace name Word not found

用于订阅的 Java 监听器设计模式

c# - WCF - 不要序列化(发出)空集合

c# - 如何取消订阅 MvvmCross 中的 WeakSubscribe

javascript - JavaScript 或 jQuery 可以检测事件传播何时完成吗?

events - NHibernate IPostInsertEventListener : Insert executed multiple times

c# - WPF TextBox EventTrigger 事件序列

c# - 如何在exe文件上设置发布者

c# - 如何在 C# 中更改 NaN 字符串表示形式?

c# - Windows 窗体 TreeView - 绑定(bind)分层递归数据源