c# - 在 Windows 服务中使用 Rx

标签 c# windows-services system.reactive

我正在尝试在 Windows 服务中使用 Rx Extensions,但我被卡住了。我发现的样本不起作用。我将用一些代码来解释我想要实现的目标。我正在创建的第一个类实际上是完成所有工作的类:

class Worker : IDisposable {
    public Worker() {
    }

    private void Run() {
    }

    public void Dispose() {
    }
}

我想在 OnStart 中创建一个实例并在 OnStop 中终止它:

public partial class MyService : ServiceBase {
    private Worker _Worker;

    public MyService () {
        InitializeComponent ();
    }

    protected override void OnStart ( string[] args ) {
        _Worker = new Worker();
    }

    protected override void OnStop () {
        _Worker.Dispose();
        _Worker = null;
    }
}

所以我在 Worker 的构造函数中做了这个:

/* _TimesEvents and _Events are class level variables */
_TimedEvents = Observable.Timer ( TimeSpan.FromSeconds ( 1 ), new EventLoopScheduler() ).Timestamp ();
_Events = ( from events in _TimedEvents select events ).Subscribe ( e => Run() );

在 Dispose 中,我只是处理 _Events。运行被调用一次。我怀疑它每秒都会被调用一次,或者根本不被调用。

我错过了什么?

编辑:

测试我的 Main() 看起来像这样:

static void Main ( ) {
    var args = Environment.GetCommandLineArgs ();
    if ( null != args && args.Length > 0 ) {
        using ( BRWorker worker = new BRWorker ()  ) {
            System.Windows.Forms.MessageBox.Show ( "Press ok to quit", "Test", System.Windows.Forms.MessageBoxButtons.OK );
        }
    } else {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new BRService() 
        };
        ServiceBase.Run ( ServicesToRun );
    }
}

最佳答案

Observable.TimerTimeSpan 完成后生成一个单个 值。您想要使用 Observable.Interval,它会在 every TimeSpan 之后产生一个新值。

关于c# - 在 Windows 服务中使用 Rx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796256/

相关文章:

c# - 我的 HTML Helper 被 Razor 限制

c# - Xaml 绑定(bind)全景 Windows Phone 8

debugging - 如何调试崩溃的 Windows 服务?

asp.net - 热衷于在 ASP/.net 中获取 Windows 服务的状态?

c# - 等待 Process.Start 以 Observable 开始

c# - 将 C++ 函数转换为 C#(字符串问题)

c# - 如何在 foreach 循环中修改结构的属性?

visual-studio-2010 - 我在哪里可以找到 VS2010 中的 Observable?

c# - Windows 服务中的可重入计时器

c# - react 性扩展 : Zip operator but different