Tag: timer

没有其他对象引用时,Timer对象是否得到GC?

如果没有其他对象引用它,是否可以对包含活动Timer( System.Timers.Timer )的对象进行垃圾回收?

C#如何在一天中的特定时间触发事件?

我正在开发一个程序,需要在一天中的某个小时删除一个文件夹(然后重新实例化),这个小时将由用户给出。 小时很可能是在夜间,因为没有人访问该文件夹(它在工作时间以外)。 有没有办法在某个时刻触发该事件? 我知道计时器,但有没有一个更简单的方法来做这个没有计时器,滴答和检查,看看它是什么时间? 编辑 :也许我不够具体。 我想触发一个方法来做某事,而不必先在一个单独的可执行文件中编译它。 此方法是作为Windows服务实现的更大类的一部分。 所以这项服务会持续运行,但是在一天的某个特定时间,它应该触发此function来删除该文件夹。 谢谢。

从System.Threading.Timer在UI中调用时如何避免泄漏句柄?

看起来在System.Threading.Timer回调函数的回调中调用Winforms控件上的Invoke,直到计时器被释放。 有没有人知道如何解决这个问题? 我需要每秒轮询一次值并相应地更新UI。 我在一个测试项目中尝试过,以确保这确实是泄漏的原因,这只是以下几点: System.Threading.Timer timer; public Form1() { InitializeComponent(); timer = new System.Threading.Timer(new System.Threading.TimerCallback(DoStuff), null, 0, 500); } void DoStuff(object o) { this.Invoke(new Action(() => this.Text = “hello world”)); } 如果您在Windows任务管理器中观看,这将泄漏2个句柄/秒。

SignalR – 检查用户是否仍然连接

我有一个方法集线器,称为客户端。 此方法启动一个带有委托的计时器,该委托每10秒运行一次。 由于如果没有人连接到集线器,继续运行此委托是没有意义的,我想在重新计划之前检查是否有任何用户仍然从委托内部连接。 有没有办法做到这一点?

BackgroundWorker&Timer,只读取日志文件的新行?

我的应用程序写入一个日志文件(目前使用log4net )。 我想设置一个计时器和一个后台工作程序来读取日志文件并将其内容打印到我的表单中的某个控件中,同时正在编写它。 我无法使用FileSystemWatcher类,因为它看起来很糟糕:有时事件“已更改”会触发,有时则不会。 它具有极低的“汇集率”。 所以我创建了一个Timer和一个FileSystemWatcher。 在计时器的“tick”事件中,后台工作人员完成其工作。 问题是: 如何只读取自上次检查工作人员以来添加的行? public LogForm() { InitializeComponent(); logWatcherTimer.Start(); } private void logWatcherTimer_Tick(object sender, EventArgs e) { FileInfo log = new FileInfo(@”C:\log.txt”); if(!logWorker.IsBusy) logWorker.RunWorkerAsync(log); } private void logWorker_DoWork(object sender, DoWorkEventArgs e) { // Read only new lines since last check. FileInfo log = (FileInfo) e.Argument; // Here is the main […]

不可重入的计时器

我有一个函数,我想每x秒调用一次,但我希望它是线程安全的。 我在创建计时器时可以设置此行为吗? (我不介意我使用哪个.NET计时器,我只是希望它是线程安全的)。 我知道我可以在我的回调函数中实现锁,但我认为如果它在计时器级别会更优雅。 我的回调函数和环境与UI无关。 [编辑1]我只是不希望我的回调函数中有多个线程。 [编辑2]我想将锁定保持在计时器级别内,因为计时器负责何时调用我的回调,这里有一种特殊情况,当我不想调用我的回调函数时。 所以我觉得什么时候打电话是计时器的责任 。

创建倒计时到目前为止C#

我想创建一个Windows窗体应用程序,它只显示一个计时器: xx天xx小时xx分钟xx秒 没有设置计时器或任何东西的选项,我想在代码中这样做但是,问题是我希望它从当前时间(DateTime.Now)倒计时到特定日期。 所以我最终得到的时间是TimeSpan类型。 我现在怀疑如何实际显示这个,所以它实际上正在工作,并且更新(倒计时)似乎无法找到帮助我的教程,所以我希望我可以在这里得到一些帮助:)

在特定时间C#(Windows服务)每天执行方法的代码失败

我有这个代码每天凌晨5点执行Windows服务的方法: 编辑: MyService ws = new MyService (); protected override void OnStart(string[] args) { if (serviceHost != null) { serviceHost.Close(); } serviceHost = new ServiceHost(typeof(MyService)); serviceHost.Open(); double TimeOfExecution = 5; DateTime now = DateTime.Now; DateTime today5am = now.Date.AddHours(TimeOfExecution); DateTime next5am = now <= today5am ? today5am : today5am.AddDays(1); System.Threading.TimerCallback callback = new System.Threading.TimerCallback(ws.MethodToExecute()); var timer1 […]

UWP App中的计时器未链接到UI

我正在开发一个UWP MVVM项目,并希望在用户交互停止一段特定时间时实现自动注销系统。 到目前为止,我正在使用DispatcherTimer从每秒200个向后计数。 TimerLeave = 200; var _dispatcherTimer = new DispatcherTimer(); _dispatcherTimer.Tick += dispatcherTimer_Tick; _dispatcherTimer.Interval = new TimeSpan(0, 0, 1); _dispatcherTimer.Start(); 但是因为DispatcherTimer与UI链接而我正在构建MVVM应用程序,所以我正在寻找替代方案。 我搜索了一下,发现在计时器上运行后台任务 。 问题是这个计时器只能设置为每15分钟运行一次,这在我的情况下自动注销用户有点太长了。 我找不到减少15分钟的解决方法。 所以我的问题是,是否有可能在UWP项目中设置一个没有链接到UI并且可以设置变量的计时器?

在TextBox条目中暂停期间引发PropertyChanged事件?

我想知道当用户在TextBox键入文本时暂停时是否可以引发PropertyChanged事件? 或者更具体地说,我想在用户停止在TextBox中键入X秒后运行一个方法。 例如,我有一个带有TextBox的表单,没有别的。 用户在TextBox中键入1-9位Id值,相当资源密集的后台进程加载记录。 我不想使用UpdateSouceTrigger=PropertyChanged因为这会导致资源密集型后台进程在键入字符时运行,因此9个ID号从这些进程中的9个开始。 我也不想使用UpdateSourceTrigger=LostFocus因为表单上没有任何其他内容可以使TextBox失去焦点。 那么有没有办法让我的后台进程只有在用户在输入ID号时暂停后才会运行?