我試圖在Windows服務中使用Rx擴展,並且卡住了。我發現的樣本不起作用。我將用一些代碼解釋我想實現的目標。我創建的第一個類實際上是類做所有的工作:在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);
}
}
謝謝。我搜索了一個簡單的解決方案... – Sascha 2012-08-03 13:24:24
我正在嘗試做同樣的事情。你可以發佈或鏈接到一個示例,顯示服務類中的哪些內容? – 2017-07-17 11:23:08