【问题标题】:How can I fire event for system variables?如何触发系统变量的事件?
【发布时间】:2016-11-29 02:15:28
【问题描述】:

我正在尝试在Application.OpenForms.Count 更改时触发事件?

【问题讨论】:

  • 我不确定是否有预建的侦听器,但我怀疑您可以在循环检查时运行异步线程,当数字更改返回异步结果并触发事件时那
  • Rx 就是为解决这类问题而创建的。
  • 你能在这个问题上设置适当的标签吗?你能读一下How to Ask吗?
  • @StevenByrne 谢谢,但我正在寻找更好的方法。
  • @PouriaSharif 在这种情况下,我建议使用 Paul Hicks 所指出的 Rx。祝你好运!

标签: c# winforms events


【解决方案1】:

这里是如何使用 Rx 非常简单地做到这一点。首先,NuGet "System.Reactive.Windows.Forms",然后你可以这样做:

IDisposable subscription =
    Observable
        .Interval(TimeSpan.FromMilliseconds(100.0))
        .Select(n => Application.OpenForms.Count)
        .DistinctUntilChanged()
        .Subscribe(count =>
        {
            /* Changed so do something here */
            Console.WriteLine(count);
        });

这显然是一个基于轮询的解决方案,因此您需要根据需要选择合适的TimeSpan

要停止订阅,在关闭您的应用程序时,您只需拨打subscription.Dispose();

【讨论】:

    【解决方案2】:

    你不能轻易地陷入其中。更好的是创建您自己的Form 子类并将其用作您的基础。使用适用于您的用例的事件增加和减少您自己的计数器。

    【讨论】:

    • 谢谢,问题是我需要一个包含 1000 个表单的项目,但我无权更改所有类。
    • @PouriaSharif 也许你应该在你的问题中解释你希望完成什么。
    猜你喜欢
    • 2021-11-26
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多