[英]How to use timer in C#?
我希望每2秒执行一次我的函数,以检查是否有任何新用户,以便为他们创建新日志。 这是在控制台应用程序中,所以我使用了线程。 但是我的控制台在运行一次功能后关闭了。 我希望计时器能够一直运行到控制台,并且我的createLog函数将每2秒执行一次。 我是C#的新手,所以也许我的计时器概念完全错误。 请帮忙...
namespace ConsoleApplication1
{
class Program
{
public static Hashtable clientsList = new Hashtable();
static void Main(string[] args)
{
Timer t = new Timer(createLog, null, 0, 2000);
IPAddress ip = IPAddress.Parse("127.0.0.1");
TcpListener serverSocket = new TcpListener(ip, 9888);
TcpClient clientSocket = default(TcpClient);
int counter = 0;
serverSocket.Start();
.... //this main is monitoring the network....
console.read();
}
private static void createLog(object state)
{
//this function checks the database and if there is new user it will create a new text file for he/she.
}
}
由于这是一个控制台应用程序,因此您需要添加类似Console.ReadLine()
以使该应用程序保持活动状态,直到用户希望将其关闭。
网上有很多关于如何使用计时器的教程。请仔细阅读它,然后研究您的代码,以获取可能犯的错误。 试试这个链接: http : //www.dotnetperls.com/timer
也许FluentScheduler可以提供帮助。
using FluentScheduler;
public class MyRegistry : Registry
{
public MyRegistry()
{
// Schedule an ITask to run at an interval
Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds();
// Schedule a simple task to run at a specific time
Schedule(() => Console.WriteLine("Timed Task - Will run every day at 9:15pm: " + DateTime.Now)).ToRunEvery(1).Days().At(21, 15);
// Schedule a more complex action to run immediately and on an monthly interval
Schedule(() =>
{
Console.WriteLine("Complex Action Task Starts: " + DateTime.Now);
Thread.Sleep(1000);
Console.WriteLine("Complex Action Task Ends: " + DateTime.Now);
}).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);
}
}
Winforms /控制台应用程序-> 比较.NET Framework类库中的计时器类
WPF-> 使用分派器构建更多响应式应用程序
在调用Start
之后,您需要一个类似Console.ReadLine
的阻塞调用来保持前台线程运行。 另外,您的计时器有资格进行垃圾回收,因为它在创建后不再被引用。 在Main方法的末尾使用GC.KeepAlive
以防止计时器被GC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.