我正在尝试在 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.Timer
在 TimeSpan
完成后生成一个单个 值。您想要使用 Observable.Interval
,它会在 every TimeSpan
之后产生一个新值。
关于c# - 在 Windows 服务中使用 Rx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796256/