C# Windows 定时器服务不发送数据
C# Windows service with timer not sending data
我创建了一个 Windows 服务,使用 json 字符串 post 将性能数据传输到 mySQL 数据库。但是,此服务每分钟需要 post 数据。我添加了一个计时器,但它似乎不是每分钟都将数据发送到数据库。
我的项目中有 2 个 classes。
程序class启动服务并运行性能代码。
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 class,它实际上是一个 Windows 服务。在这个 class 中,我设置了我的计时器。
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";
}
如果您想查看任何其他代码,请告诉我。
我的代码中是否有任何错误不允许服务在指定的时间间隔内 post 数据?
谢谢。
我已将计时器放在 Main(string[] args)
中。这是我的回答:
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 300000; // 30 minutes
timer.Elapsed += new ElapsedEventHandler(serverCall);
timer.AutoReset = true;
timer.Start();
}
我创建了一个 Windows 服务,使用 json 字符串 post 将性能数据传输到 mySQL 数据库。但是,此服务每分钟需要 post 数据。我添加了一个计时器,但它似乎不是每分钟都将数据发送到数据库。
我的项目中有 2 个 classes。 程序class启动服务并运行性能代码。
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 class,它实际上是一个 Windows 服务。在这个 class 中,我设置了我的计时器。
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";
}
如果您想查看任何其他代码,请告诉我。 我的代码中是否有任何错误不允许服务在指定的时间间隔内 post 数据? 谢谢。
我已将计时器放在 Main(string[] args)
中。这是我的回答:
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 300000; // 30 minutes
timer.Elapsed += new ElapsedEventHandler(serverCall);
timer.AutoReset = true;
timer.Start();
}