)如何?Windows服務

來源:互聯網
上載者:User
一、 遇到什麼問題?
有些軟體,需要每隔一定時間做一些相同的事情,或者作為網路服務,像IIS、SQL Server等這樣的軟體。此種情況下,往往需要讓軟體在沒有使用者幹預的情況下在伺服器上運行。與此種程式互動往往需要通過網路通訊協定進行。或者程式根本就不需要與使用者互動。這種程式往往稱為背景程式,或後台服務。

二、 Windows服務能做些什嗎?
Windows服務是這些背景程式、後台服務的正規名詞。Windows服務的運行可以在沒有使用者幹預的情況下,在後台運行,沒有任何介面。通過Windows服務管理員進行管理。服務管理員也只能做些簡單的操作:開始,暫停,繼續,停止。
Windows服務和普通的Windows表單應用程式類型,只是沒有了介面,連最簡單的MessageBox也不能彈出來。所以不要試圖在Windows服務裡通過這種方式來提示使用者。因為可能根本沒有使用者登入電腦。
Windows服務的特點:
 在後台運行
 沒有使用者互動
 可以隨Windows啟動而啟動
三、 如何?Windows服務?
下面按“隔一定時間做一些相同的事情”的服務為例,說明Windows服務如何?。
先按普通Windows程式設計好你的程式邏輯。
建立一個空白解決方案WindowsService.sln
添加Windows類庫項目ServiceBusiness.csproj
將Class1.cs改名為ServiceBusiness.cs
添加一個方法Dothings(),這個方法用來每隔一段時間調用一次,做些周期性的事情。

using System;

namespace ServiceBusiness
{
    public class ServiceBusiness
    {
        public void Dothings()
        {
            //隔一段時間調用一次
        }
    }
}

向解決方案添加一個WindowsService.csproj

將Service1.cs重新命名為Service.cs
給WindowsService添加ServiceBusiness項目引用
開啟Service.cs程式碼檢視,向Service類新增成員
ServiceBusiness.ServiceBusiness serviceBusiness;
在建構函式裡面對serviceBusiness執行個體化
serviceBusiness = new ServiceBusiness.ServiceBusiness();
在using位置添加System.Theading
using System.Threading;
給Service類添加計時器
Timer serviceTimer;
添加TimeCallback方法,用於計時器調用

        public void TimerCallback(object obj)
        {
            //隔一段時間調用一次
            serviceBusiness.Dothings();
        }

在OnStart()方法中添加方法,用於啟動計時器
serviceTimer = new Timer(new TimerCallback(TimerCallback), state, 0, period);
此處,state用於儲存狀態,如果不需要,儲存狀態,可以傳入null。第三個參數0表示立即調用TimerCallback方法,如果不需要立即調用,可以傳入period。period是計時器的計時間隔,單位為毫秒。
重載 OnPause ()和OnContinue ()方法,對計時器進行控制。
Service.cs代碼如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;

namespace WindowsService
{
    public partial class Service : ServiceBase
    {
        Timer serviceTimer;
        ServiceBusiness.ServiceBusiness serviceBusiness;
        int period;
        object state;
        public Service()
        {
            InitializeComponent();
            serviceBusiness = new ServiceBusiness.ServiceBusiness();
        }

        protected override void OnStart(string[] args)
        {
            //啟動timer
            period = ServiceSettings.Default.ServiceTimerIntervalSecond * 1000;
            serviceTimer = new Timer(new TimerCallback(TimerCallback), state, 0, period);
        }

        protected override void OnStop()
        {
            //停止計時器
            serviceTimer.Change(Timeout.Infinite, Timeout.Infinite);
        }

        protected override void OnContinue()
        {
            //重新開始計時
            serviceTimer.Change(0, period);
        }

        protected override void OnPause()
        {
            //停止計時器
            serviceTimer.Change(Timeout.Infinite, Timeout.Infinite);
        }
        
        public void TimerCallback(object obj)
        {
            //隔一段時間調用一次
            serviceBusiness.Dothings();
        }

    }
}

開啟Program.cs檔案
為了調試方便,在Main方法中,直接加入調用Dothings()。這樣就可以在IDE中方便偵錯工具。

using System.Collections.Generic;
using System.ServiceProcess;
using System.Text;

namespace WindowsService
{
    static class Program
    {
        /// <summary>
        /// 應用程式的主進入點。
        /// </summary>
        static void Main(string[] args)
        {
#if DEBUG
            ServiceBusiness.ServiceBusiness serviceBusiness = new ServiceBusiness.ServiceBusiness();
            //在偵錯模式下,直接調用
            serviceBusiness.Dothings(args);
#else
            ServiceBase[] ServicesToRun = new ServiceBase[] { new Service() };
            ServiceBase.Run(ServicesToRun);
#endif
        }
    }
}

作者:閃電
來自:baiguli.cnblogs.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.