繁体   English   中英

在Windows服务中使用Rx

[英]Using Rx in a Windows Service

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

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 );
    }
}

TimeSpan完成后, Observable.Timer生成单个值。 您希望使用Observable.Interval ,它在每个 TimeSpan之后生成一个新值。

您可能想要使用Observable。 间隔http://rxwiki.wikidot.com/101samples#toc14

暂无
暂无

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

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