我是c#开发的新手。我的目标是在后台发送toast通知(通过使用Windows服务(以更改一些时间段。Program.cs文件:
static class Program {
static void Main() {
try {
ServiceBase[] servicesToRun = {
new TestService()
};
ServiceBase.Run(servicesToRun);
Notifications notifications = new Notifications();
notifications.Start();
var notive = new ToastContentBuilder();
notive.AddText("Notification");
notive.Show();
}
catch (Exception e) {
Logger.WriteLine("Unhandled exception: " + e.Message);
}
}
}
和通知文件:
public class Notifications
{
private readonly Timer _timer;
public Notifications()
{
_timer = new Timer(1000 * 10) {
AutoReset = true};
_timer.Elapsed += TimerElapsed;
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
var notive = new ToastContentBuilder();
notive.AddText("Notification2");
notive.Show();
}
public void Start()
{
_timer.Start();
}
public void Stop()
{
_timer?.Stop();
}
}
当我使用cmd命令"TestService.exe start"时,我可以看到"Notification",但应该每10秒发送一次的"Notification2"没有出现。同时添加代码:
string[] lines = new string[] { DateTime.Now.ToString() };
File.AppendAllLines(@"C:Visual Studio WorkPlaceLicense.txt", lines);
在创建toast之前,"Notification2"将起作用。我想这可能是因为toast"Notification2"没有出现在主线程中。
如果您使用的是dotnet核心,您可以使用带计时器的后台服务
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visualstudio#定时后台任务。
否则,您可以在Windows服务中使用计时器。并使用服务的启动和停止方法来控制计时器。
在这里解释,带定时器的Windows服务