0
我做了一個Windows服務,使用json字符串將性能數據發佈到mySQL數據庫。但是,此服務需要每分鐘發佈一次數據。我添加了一個計時器,但似乎並不是每分鐘都會將數據發送到數據庫。C#Windows服務與定時器不發送數據
我在我的項目中有2個類。 程序類啓動服務並運行性能代碼。
public static string ServiceName = "performanceService";
static void Main(string[] args)
{
if (!Environment.UserInteractive)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServiceControl()
};
ServiceBase.Run(ServicesToRun);
}
else
{
PerformanceCounter ramCount = new PerformanceCounter("Memory", "Available MBytes");
PerformanceCounter cpuCount = new PerformanceCounter("Processor", "% Processor Time", "_Total");
}
剩餘代碼被省略。
然後我有一個ServiceControl類,它實際上是一個Windows服務。在這堂課中,我設定了我的計時器。
System.Timers.Timer timer = new System.Timers.Timer();
public ServiceControl()
{
ServiceName = Program.ServiceName;
InitializeComponent();
}
public void timerElapsed(object sender, EventArgs e)
{
Console.WriteLine("Time Elapsed");
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
timer.Elapsed += new ElapsedEventHandler(timerElapsed);
timer.Interval = 60000;
timer.Enabled = true;
timer.Start();
}
protected override void OnStop()
{
base.OnStop();
timer.Enabled = false;
timer.Stop();
}
private void InitializeComponent()
{
//
// ServiceControl
//
this.ServiceName = "performanceService";
}
如果您還有其他代碼想要查看,請告訴我。 我的代碼中有什麼問題不允許服務以指定的時間間隔發佈數據? 謝謝。
那麼會發生什麼?它從不發佈數據?它張貼一次?它隨機發布它?它......? – stuartd
此外,這聽起來像使用帶有內置調度的Windows服務框架,如[Topshelf.Quartz](https://www.nuget.org/packages/Topshelf.Quartz/) – stuartd
@stuartd它會更容易只在應用程序運行時發佈,而不是在服務運行時發佈。我希望該服務每分鐘發佈一次信息,而無需運行該應用程序。 – coderblogger