gpt4 book ai didi

c# - 除非在一定时间内未调用函数,否则计时器不会启动

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:06 25 4
gpt4 key购买 nike

.checked 命令在 15 分钟内未完成时,我希望计时器每分钟发送一条垃圾邮件。现在,出于测试目的,我将其设置为一些快得离谱的数量。 Check() 在 .checked 完成时调用。

我试过这样做:

      public static void Check()
{
MinecraftClient.ChatBots.DiscordWallTimer.TimerOn = false;
Program.StartTimer();
}

public static System.Timers.Timer EnableTimer;

public static Task StartTimer()
{
EnableTimer = new Timer()
{

Interval = 15 * 1000,
AutoReset = false,
Enabled = true
};
EnableTimer.Elapsed += OnTimerTicked;

return Task.CompletedTask;
}
public static void OnTimerTicked(object sender, ElapsedEventArgs e)
{
MinecraftClient.ChatBots.DiscordWallTimer.TimerOn = true;
MinecraftClient.ChatBots.DiscordWallTimer.StartTimer();

}

在我的计时器类中有这个:

public class DiscordWallTimer
{

public static bool TimerOn;

public static System.Timers.Timer wallTimer;

internal static Task StartTimer()
{
Console.WriteLine("Wall timer has started");

wallTimer = new Timer()
{

Interval = 5*1000,
AutoReset = true,
Enabled = TimerOn
};
wallTimer.Elapsed += OnTimerTicked;

return Task.CompletedTask;
}

private static void OnTimerTicked(object sender, ElapsedEventArgs e)
{
if (TimerOn == true)
{
Program.SendAlertDiscord();
}
}

}

唯一的问题是,如果最近已完成 .check,警报仍会发送(我认为为了测试我将其设置为 15 秒。)提前致谢!

最佳答案

我建议使用专为执行此类操作而设计的库,而不是摆弄计时器 - 这可能很困难。

试试微软的 Reactive Framework:

private static Subject<Unit> _check = new Subject<Unit>();
private static IDisposable _subscription = null;

private static void SetUp()
{
_subscription =
_check
.Select(x => Observable.Timer(TimeSpan.FromMinutes(15.0), TimeSpan.FromMinutes(1.0)))
.Switch()
.Subscribe(x => Program.SendAlertDiscord());
}

public static void Check()
{
_check.OnNext(Unit.Default);
}

就是这样。只需调用 SetUp 一次,然后每当您调用 Check() 时,您将启动一个 15 分钟的计时器,然后每分钟发送一次垃圾邮件。对 Check() 的任何调用都会自动重置计时器。

如果您想关闭代码,请调用 _subscription.Dispose();

只需 NuGet "System.Reactive"获取位,然后将 using System.Reactive.Linq; 添加到您的代码中。

如果您有任何线程问题,请告诉我,我会帮助您将代码编码到正确的线程。

关于c# - 除非在一定时间内未调用函数,否则计时器不会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52268864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com