public virtual void RunThreads(string fileName)
        {
            List <string> files = CheckFile(fileName);

            if (files.Count == 0)
            {
                return;
            }
            maxV = files.Count;
            //Wrapper wrapper = new Wrapper();
            //List<Thread> runnigThreads = new List<Thread>();
            if (this is FragBagProfile || set.iOTroubles)// || this is RNASSProfile)
            {
                threadNumbers = 1;
            }
            Task[] runnigTask = new Task[threadNumbers];
            Task   startProg;

            PrepareDataForThreading(files, threadNumbers);

            for (int i = 0; i < threadNumbers; i++)
            {
                ThreadFiles tparam = new ThreadFiles();


                tparam.fileName     = GetProfileFileName(fileName) + "_" + i;
                tparam.dirName      = GetDirectory(fileName);
                tparam.threadNumber = i;
                startProg           = new Task <int>(n => Run((object)n), tparam);

                startProg.Start();
                //startProg.Start(tparam);
                runnigTask[i] = startProg;

                //while (!startProg.IsAlive) ;
                //RunSubList(auxFiles, fileN);
            }
            for (int i = 0; i < threadNumbers; i++)
            {
                runnigTask[i].Wait();
            }
            //Task.WaitAll(runnigTask);

            currentProgress = maxV;
            if (ex != null)
            {
                throw ex;
            }
            //runnigTask[i].Join();
            if (files.Count > 0)
            {
                JoinFiles(fileName);
            }
        }
        public virtual void RunThreads(string fileName)
        {           
            List<string> files = CheckFile(fileName);

            if (files.Count == 0)
                return;
            maxV = files.Count;
            //Wrapper wrapper = new Wrapper();
            //List<Thread> runnigThreads = new List<Thread>();
            Task[] runnigTask = new Task[threadNumbers];
            Task startProg;

            PrepareDataForThreading(files, threadNumbers);

            for (int i = 0; i < threadNumbers; i++)
            {
                ThreadFiles tparam = new ThreadFiles();


                tparam.fileName = GetProfileFileName(fileName) + "_" + i;
                tparam.dirName = GetDirectory(fileName);
                tparam.threadNumber = i;
                startProg = new Task<int>(n => Run((object) n),tparam);

                startProg.Start();
                //startProg.Start(tparam);
                runnigTask[i]=startProg;

                //while (!startProg.IsAlive) ;
                //RunSubList(auxFiles, fileN);
            }
            for (int i = 0; i < threadNumbers; i++)
                runnigTask[i].Wait();
                //Task.WaitAll(runnigTask);

            currentProgress = maxV;
            if (ex != null)
                    throw ex;
                //runnigTask[i].Join();
            if(files.Count>0)
                JoinFiles(fileName);

        }