阻止控制台应用关闭,但仍然运行代码

时间:2017-02-21 04:00:59

标签: c# console-application stopwatch

我有一个不使用代码

终止的控制台应用程序
new System.Threading.AutoResetEvent(false).WaitOne();

我想要实现的目标:我希望运行StopWatch,如果符合条件,它将运行某些文件操作代码。最后在代码块之后,重置计时器并等待它再次true重新运行。

问题:然而,在调试时,我无法让我的代码完成我的条件,即使它已经通过了所需的条件。

我的代码:

static void Main(string[] args)
    {
        string mutex_id = "41585f436f766572743243494d";
        using (System.Threading.Mutex mtx = new System.Threading.Mutex(false, mutex_id))
        {
            if(!mtx.WaitOne(0,false))
            {
                return;
            }
            processTimer = new Stopwatch();
            processTimer.Start();

            if (processTimer.Elapsed.Seconds > 10)
            {
                processTimer.Stop();
                fileQueue = Directory.GetFiles(ConfigurationManager.AppSettings["WatchPath"], ConfigurationManager.AppSettings["Format"]).ToList();
            }
            //process the fileQueue
            //..
            //..
            //processTimer.Reset(); -> Reset Timer to wait for another 10 sec and process again
            new System.Threading.AutoResetEvent(false).WaitOne();
        }
    }

之前我使用过FileSystemWatcher但是我没能正确地获得进程(比如连续/并发文件创建等)。尝试ThreadingTimers作为我的question

现在我正试图从新的角度来解决这个问题。希望有人能用这启发我。

1 个答案:

答案 0 :(得分:2)

没有"再试一次"在你的代码中。

您编写的代码执行以下操作:

  1. 创建互斥锁并将其锁定
  2. 如果已存在,请关闭申请
  3. 启动秒表
  4. 检查是否已经过了10秒(他们没有这样做)
  5. 创建新的AutoResetEvent并等待永远
  6. 你需要一些循环来定期检查是否已经过了10秒,否则Sleep