簡體   English   中英

如何在c#中重復觸發給定時間間隔的事件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM