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 を Disposing するだけです。Run は 1 回呼び出されます。毎秒呼び出されているか、まったく呼び出されていないと思われます。
私は何が欠けていますか?
編集:
私の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 );
}
}