![](/img/trans.png)
[英]Windows service to read from database and invoke applications based on dates
[英]Windows Service + read from database
我是Windows服務的新用戶。 我需要Windows服務,該服務從數據庫的表中讀取條目。 我有一個CONSOLE APP,在其中添加了新項目WINDOWS SERVICE。 我已經有一個訪問數據庫的方法和其他方法。 我可以將一個線程放在讀取數據庫的啟動位置。 我將線程放在哪里? ( 我怎樣才能做到這一點)。 我在WINDOWS SERVICE的哪里添加這些方法? 我有這樣的Windows服務:
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
do
{
thread.start();
bool variab = readFromDatabase (Database table);
}
}
protected override void OnStop()
{
}
我建議您創建一個類,在其中您需要做的一切並在服務中創建:
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
YourClass cl = new YourClass();
cl.DoWhatYouNeed(...);
}
protected override void OnStop()
{
}
這使您有機會獨立於服務運行和測試您的類,可能是在調試發布期間。
對於Windows服務,通常會在一個單獨的線程中創建一個方法來執行服務的主循環。 否則,該服務可能無法響應。 例如,您可以使用一種稱為MainLoop的方法來執行服務邏輯。 僅使用OnStart方法執行初始化任務,例如讀取配置值或啟動服務的線程。 並使用OnStop執行清潔任務,停止線程等...
Thread _workerThread;
bool _shouldStop;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try{
_workerThread = new Thread(new ThreadStart(MainLoop));
_shouldStop = false;
_workerThread.Start();
}
catch{}
}
private void MainLoop()
{
while (!_shouldStop)
{
try{
//your logic here
}
catch{}
}
}
protected override void OnStop()
{
_shouldStop = true;
}
您必須將包含數據訪問邏輯的代碼或類放在OnStart方法中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.