Ejemplo n.º 1
0
        //Многопоточная конвертации партии .qsh файлов
        private void ConvertPart(List <string> files)
        {
            var array = new Task[files.Count];

            for (int i = 0; i < files.Count; i++)
            {
                var file = files[i];

                array[i] = new Task((() =>
                {
                    try
                    {
                        var totalList = new List <List <Trade> >();

                        if (_sourceDataType == SourceDataType.OrderLog)
                        {
                            totalList = OrdLogReader(file);
                        }

                        if (_sourceDataType == SourceDataType.Deals)
                        {
                            totalList.Add(DealsReader(file));
                        }

                        foreach (var list in totalList)
                        {
                            if (list.Count > 1)
                            {
                                var sec = list[0].Security;

                                _storage.Save(list, sec);

                                for (int j = 0; j < _timeFrames.Count; j++)
                                {
                                    var tf = _timeFrames[j];

                                    using (var createCandle = new CandleBuilder(tf))
                                    {
                                        var candles = createCandle.Build(list);
                                        _storage.Save(candles, tf, sec);
                                    }
                                }

                                list.Clear();
                            }
                        }

                        lock (_lock)
                            Progress();
                    }
                    catch (Exception e)
                    {
                        Exception?.Invoke(e.ToString());
                    }
                }));
            }

            foreach (var task in array)
            {
                task.Start();
            }

            Task.WaitAll(array);
        }