public void Start(Options options)
        {
            int count = options.InputFiles.Count;

            if (count == 0)
            {
                return;
            }

            HeuristicLabWorkingThread[] hlWorkingThread = new HeuristicLabWorkingThread[count];
            Thread[]     hlThreads           = new Thread[count];
            WaitHandle[] finishedWaitHandles = new WaitHandle[count];

            for (int i = 0; i < count; i++)
            {
                ManualResetEventSlim finishedEvent = new ManualResetEventSlim(false, 1);
                finishedWaitHandles[i] = finishedEvent.WaitHandle;


                hlWorkingThread[i] = new HeuristicLabWorkingThread(options.InputFiles[i], options.Repetitions, finishedEvent, options.Verbose);
                hlThreads[i]       = new Thread(new ThreadStart(hlWorkingThread[i].Run));
                hlThreads[i].Start();
            }

            WaitHandle.WaitAll(finishedWaitHandles);
            foreach (var wait in finishedWaitHandles)
            {
                wait.Dispose();
            }
        }
    public void Start(Options options) {
      int count = options.InputFiles.Count;
      if (count == 0) return;

      HeuristicLabWorkingThread[] hlWorkingThread = new HeuristicLabWorkingThread[count];
      Thread[] hlThreads = new Thread[count];
      WaitHandle[] finishedWaitHandles = new WaitHandle[count];

      for (int i = 0; i < count; i++) {
        ManualResetEventSlim finishedEvent = new ManualResetEventSlim(false, 1);
        finishedWaitHandles[i] = finishedEvent.WaitHandle;


        hlWorkingThread[i] = new HeuristicLabWorkingThread(options.InputFiles[i], options.Repetitions, finishedEvent, options.Verbose);
        hlThreads[i] = new Thread(new ThreadStart(hlWorkingThread[i].Run));
        hlThreads[i].Start();
      }

      WaitHandle.WaitAll(finishedWaitHandles);
      foreach (var wait in finishedWaitHandles) {
        wait.Dispose();
      }
    }