[英]How to trigger an event for the given interval of time repeatedly in c#?
如何安排事件,例如,我需要調用一個方法,該方法應每隔給定秒執行一次操作。 我正在開發簡單的Windows窗體應用程序,我嘗試使用like
while(true)
{
methodToBeScheduled();
Thread.Sleep(60000);
}
這段特定的代碼使我的應用程序在執行時“無響應”。 希望計時器可以執行此操作或您專家建議的任何其他邏輯,請告訴我。
謝謝!
您可以使用WinForms計時器 :
Timer _timer;
// In constructor (or anywhere you want to start the timer, e.g. a button event):
_timer = new Timer();
_timer.Interval = 60000; // milliseconds
_timer.Tick += (sender, e) => methodToBeScheduled();
_timer.Start();
這將導致methodToBeScheduled
大約每60秒調用一次。 將在主UI線程上調用它,因此避免在其中進行任何繁重的處理。
使用此計時器的優點是它是內置的,不需要線程同步,並且易於使用。 缺點是間隔不精確-實際間隔將根據應用程序中需要處理的其他消息而有所不同,並且也受Windows系統時鍾的影響,該時鍾只能精確到10-20ms或所以。
您可以使用Timer
(System.Threading.Timer)。
using System;
using System.Threading;
Timer _timer = null;
_timer = new Timer(o =>
{
methodToBeScheduled();
});
_timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(60));
Var序列= Observable.interval(1)。發布Sequence.subscribe ....
將允許訂閱一個可觀察的對象,該對象將每秒觸發一個onnext。 請參閱反應式擴展..
討厭在iPad上打字。
是的,.net中存在三種不同類型的計時器(所有名稱都稱為Timer,但行為有所不同)。 windows.forms計時器以一定的速率執行一個函數-它從UI線程調用該函數。 System.Threading計時器執行相同的操作,但從另一個線程調用該函數。 還有一個我不記得的計時器。 您必須根據自己的情況選擇其中之一。
線程計時器是我的最愛。 這是一個如何使用它的示例。 請記住,您要調用的任何內容都不是通過UI線程完成的。 如果存在問題,可能要使用表單計時器或進行同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.