c# - 在后台线程中运行计时器

标签 c# background-thread

我正在寻找一种在后台线程中使用 System.Windows.Forms.Timer 的方法。我很难让它在后台线程中启动和停止。这就是我正在做的:

private System.Windows.Forms.Timer chkTimer = new System.Windows.Forms.Timer();

然后在 backgroundworker_dowork 方法中我有这个:

     chkTimer.Interval = 2000;
     chkTimer.Tick += new EventHandler(chkTimer_Tick);
     chkTimer.Start();

在 Tick 方法中,我有与计时器相关的代码,但由于某种原因它不会运行。如果我在 ui 线程中声明以上内容,它就可以工作。有人可以帮我在后台线程中启动计时器吗?我不想使用 System.Timers,所以请不要建议

谢谢

最佳答案

using System.Timers;
using System.Threading.Tasks;
.
.
.
var timer = new Timer(250);
.
.
.
private void Initialize()
{
    timer.Elapsed += (o, s) => Task.Factory.StartNew(() => OnTimerElapsed(o, s));
    timer.Start();
}
.
.
.
private void OnTimerElapsed(object o, ElapsedEventArgs s)
{
    //Do stuff
}

如果需要,您也可以去掉 OnTimerElapsed 参数“o”和“s”。

关于c# - 在后台线程中运行计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445957/

相关文章:

C# 精确显示标签 X 秒并隐藏它 Y 秒

ios - 我可以运行后台线程,即使应用程序已关闭

android - 如果我无限期地在后台运行 Android 线程会发生什么

ios - Cordova 在 iOS 中显示警告为 "THREAD WARNING: [Your function] took [n] ms. "

c# - 谓词委托(delegate)可以简单地称为 boolean 委托(delegate)吗?

c# - 在 asp.net web api 中支持 @odata.bind(在发布期间链接到现有实体)

c# - 无法获取 .net core 3.0 单个文件的原始可执行路径 '/p:PublishSingleFile=true'

c# - Windows 8 XAML 不支持触​​发器?

ios - 当应用程序也在后台时如何调用网络电话