C# 控制台批处理应用程序中的最佳计时器方法

Joh*_*ler 3 c# console timer batch-file

对于必须按以下方式处理的 C# 控制台批处理应用程序,哪种计时器方法是最佳的:

  1. 连接到数据源
  2. 处理批处理直到发生超时或处理完成。“用数据源做点什么”
  3. 优雅地停止控制台应用程序。

相关问题:如何向 C# 控制台应用程序添加计时器

Tim*_*uri 5

抱歉,这是一个完整的控制台应用程序...但这里有一个完整的控制台应用程序,可以帮助您入门。再次,我为这么多代码道歉,但其他人似乎都在给出一个“哦,你所要做的就是去做”的回答:)

using System;
using System.Collections.Generic;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static List<RunningProcess> runningProcesses = new List<RunningProcess>();

        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");

            for (int i = 0; i < 100; i++)
            {
                DoSomethingOrTimeOut(30);
            }

            bool isSomethingRunning = false;

            do
            {
                foreach (RunningProcess proc in runningProcesses)
                {
                    // If this process is running...
                    if (proc.ProcessThread.ThreadState == ThreadState.Running)
                    {
                        isSomethingRunning = true;

                        // see if it needs to timeout...
                        if (DateTime.Now.Subtract(proc.StartTime).TotalSeconds > proc.TimeOutInSeconds)
                        {
                            proc.ProcessThread.Abort();
                        }
                    }
                }
            }
            while (isSomethingRunning);

            Console.WriteLine("Done!");    

            Console.ReadLine();
        }

        static void DoSomethingOrTimeOut(int timeout)
        {
            runningProcesses.Add(new RunningProcess
            {
                StartTime = DateTime.Now,
                TimeOutInSeconds = timeout,
                ProcessThread = new Thread(new ThreadStart(delegate
                  {
                      // do task here...
                  })),
            });

            runningProcesses[runningProcesses.Count - 1].ProcessThread.Start();
        }
    }

    class RunningProcess
    {
        public int TimeOutInSeconds { get; set; }

        public DateTime StartTime { get; set; }

        public Thread ProcessThread { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)