我希望我的函数每2秒执行一次,以检查是否有新用户,以便我可以为它们创建一个新日志。这是在控制台应用程序中,所以我使用Thread。但是我的控制台在运行一次该功能后关闭了。我希望计时器能够运行,只要我运行控制台,我的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.
}
}
答案 0 :(得分:0)
由于这是一个控制台应用程序,因此您需要添加Console.ReadLine()
之类的内容,以保持应用程序处于活动状态,直到用户想要将其关闭为止。
答案 1 :(得分:0)
网上有很多关于如何使用计时器的教程。请仔细检查然后研究你的代码,以解决你可能犯的错误。 试试这个链接:http://www.dotnetperls.com/timer
答案 2 :(得分:0)
也许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);
}
}
答案 3 :(得分:0)
Winforms /控制台应用 - &gt; Comparing the Timer Classes in the .NET Framework Class Library
答案 4 :(得分:0)
在调用Console.ReadLine
以保持前台线程运行后,您需要阻塞调用Start
。此外,您的Timer有资格进行垃圾收集,因为它在创建后不会再次引用。使用Main方法末尾的GC.KeepAlive
来防止计时器被GC。