public static void StartCalcText(BackgroundWorker ProgressBar, bool[] EnableChannel, DoWorkEventArgs e) { if (Create_CSV("Summary") != DialogResult.OK) // Создание файла CSV проверка на отмену) { return; } InitCsv(); //ulong NumEv; // Номер Event var fs = new FileStream(String.Format("{0}", ReadFilePath), FileMode.Open); // Экземпляр потока чтения var fsr = new StreamReader(fs); string readerLine = ""; BackGroundWorkerResult calculationresult; ulong TimeStampnSec; // Время тригера сек int NumEv = 0; // Время тригера сек ulong TimeStampSec; // Время ригера нсек ulong StartTimeStampnSec; // Время тригера сек int NumCircleNumEvent = 0; // Количество кругов Event //long prog_st = (fs.Length / 10000) - 1; // шаг для Progress Bar using (writer) { AddHeaderCalc(EnableChannel);// Запись загаловка файл readerLine = fsr.ReadLine(); readerLine = readerLine.Substring(4); readerLine = readerLine.Substring(readerLine.IndexOf(' ') + 1); StartTimeStampnSec = ulong.Parse(readerLine.Substring(readerLine.IndexOf(" ") + 1, readerLine.IndexOf('.') - 2 - readerLine.IndexOf(" ") + 1)) * 1000000000; // Запись время триггера нсек*/ readerLine = readerLine.Substring(readerLine.IndexOf('.') + 1); StartTimeStampnSec += ulong.Parse(readerLine.ToString()); fs.Position = 0; fsr.DiscardBufferedData(); readerLine = fsr.ReadLine(); while (!fsr.EndOfStream) { BufferData <CalcInterf> buferfiledata = new BufferData <CalcInterf>(); // Экземпляр для хранения данных вычислений BlockData <Adc_Interface> adcbuffer = new BlockData <Adc_Interface>(); // экземпляр данных adc в блоке event BlockData <Tdc_Interface> tdcbuffer = new BlockData <Tdc_Interface>(); // экземпляр данных tdc в блоке event if (readerLine.Substring(0, 3) == "Ev:") { readerLine = readerLine.Substring(4); if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = int.Parse(readerLine.Substring(0, readerLine.IndexOf(" "))) + 16777215 * NumCircleNumEvent; readerLine = readerLine.Substring(readerLine.IndexOf(' ') + 1); TimeStampSec = uint.Parse(readerLine.Substring(readerLine.IndexOf(" ") + 1, readerLine.IndexOf('.') - 2 - readerLine.IndexOf(" ") + 1)); // Чтение даты и времени глобального Event и конвертация из unix в стандратный вид readerLine = readerLine.Substring(readerLine.IndexOf('.') + 1); TimeStampnSec = uint.Parse(readerLine.ToString()); // добавление к дате времени в нс buferfiledata.AddHeaderEvent(NumEv, TimeStampSec, TimeStampnSec); //Запись данных триггера bool isenddata = false; while (!isenddata) { readerLine = fsr.ReadLine(); if (readerLine is null) { break; } switch (readerLine.Substring(0, 3)) { case "Tdc": { readerLine = readerLine.Substring(4); int ch = int.Parse(readerLine.Substring(0, readerLine.IndexOf(':'))); //Добавление канала, данных, if (!IsNeedChannel(ch + 1, CChannel)) { break; //проверка нужды канала } uint value = uint.Parse(readerLine.Substring(readerLine.IndexOf(": ") + 2)) * 25; //чтение данных tdc tdcbuffer.Newrecord(ch, new Tdc_Interface(LEADING_FRONT, value)); //Запись данных в блок данных tdc break; } case "Adc": { readerLine = readerLine.Substring(4); int ch = int.Parse(readerLine.Substring(0, readerLine.IndexOf(':'))); //чтение канала данных if (!IsNeedChannel(ch + 1, CChannel)) { break; //проверка нужды канала } uint timestamp = uint.Parse(readerLine.Substring(readerLine.IndexOf(": ") + 1, readerLine.IndexOf(';') - (readerLine.IndexOf(": ") + 1))) * 8; readerLine = readerLine.Substring(readerLine.IndexOf(';') + 2); List <int> databuf = new List <int>(); //Массив для sample adc while (true) { try { //databuf.Add(int.Parse(readerLine.Substring(0, readerLine.IndexOf(' ')))); databuf.Add(TQDC2Configs.ChGain[ch] ? (int.Parse(readerLine.Substring(0, readerLine.IndexOf(' '))) + (int)TQDC2Configs.X4[ch]) : (int.Parse(readerLine.Substring(0, readerLine.IndexOf(' '))) + (int)TQDC2Configs.X1[ch])); readerLine = readerLine.Substring(readerLine.IndexOf(' ') + 1); } catch { //databuf.Add(int.Parse(readerLine)); databuf.Add(TQDC2Configs.ChGain[ch] ? (int.Parse(readerLine) + (int)TQDC2Configs.X4[ch]) : (int.Parse(readerLine) + (int)TQDC2Configs.X1[ch])); break; } } adcbuffer.Newrecord(ch, new Adc_Interface(databuf, timestamp)); // Чтение временной метки ADC в нС break; } case "Ev:": { isenddata = true; break; } } } } AddRecordCalc(buferfiledata, tdcbuffer, adcbuffer); // запись данных event в блок вычисленных данных WriteFileCalc(buferfiledata, writer, StartTimeStampnSec); //запись в файл ProgressBar.ReportProgress((int)NumEv, adcbuffer); // Возращение прогресса в BackgroundWorker ProgressBar (повышение строки прогресса в окне) if (ProgressBar.CancellationPending == true) { CloseCsv(); // закрытие потока записи fs.Close(); // закрытие потока чтения return; } } } calculationresult = new BackGroundWorkerResult(CALCULATION, 100, OK); e.Result = calculationresult; //Возращение переменной для различия процесса CloseCsv(); // закрытие потока записи fs.Close(); // закрытие потока чтения }
public static void StartCalcBinary(BackgroundWorker ProgressBar, bool[] EnableChannel, DoWorkEventArgs e) { if (Create_CSV("Summary") != DialogResult.OK) // Создание файла CSV { return; } InitCsv(); // Инициирование экземпляров записи BackGroundWorkerResult calculationresult; int EvLeng; // Длина глобального Event в байтах int MSLeng; // Длина блока MStream int DataPLLeng; // Длина блока DataPayload int NumEv = 0; // Номер Event long pos = 0; // Позиция в блоке файла long pospl; // Позиция в блоке DataPayload long prog = 0; // Позиция для Progress Bar ulong TimeStampnSec; // Время тригера сек ulong TimeStampSec; // Время тригера нсек ulong StartTimeStampnSec; // Время тригера сек int NumCircleNumEvent = 0; // Количество кругов Event var fs = new FileStream(string.Format("{0}", ReadFilePath), FileMode.Open); // Экземпляр потока чтения using (writer) // поток для записи { AddHeaderCalc(EnableChannel); // Запись загаловка файл StartTimeStampnSec = ((ulong)Byte2uInt(ReadBytes(24, 4, fs)) * 1000000000) + (ulong)(Byte2uInt(ReadBytes(28, 4, fs)) >> 2); // Запись время триггера нсек while (pos < fs.Length) // Главный цикл (пока позиция в блоке Event меньше длины файла в байтах) { BufferData <CalcInterf> buferfiledata = new BufferData <CalcInterf>(); // Экземпляр для хранения данных вычислений EvLeng = Byte2Int(ReadBytes(pos + 4, 4, fs)); // Чтение длины Event if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = Byte2Int(ReadBytes(pos + 8, 4, fs)) + 16777215 * NumCircleNumEvent; // Номер Event MSLeng = Byte2Int(ReadBytes(pos + 21, 3, fs)) >> 2; // Чтение длины блока MStream TimeStampSec = Byte2uInt(ReadBytes(pos + 24, 4, fs)); // Запись время триггера сек TimeStampnSec = Byte2uInt(ReadBytes(pos + 28, 4, fs)) >> 2; // Запись время триггера нсек buferfiledata.AddHeaderEvent(NumEv, TimeStampSec, TimeStampnSec); //Запись данных триггера pospl = pos + 32; // присваивание поцизии в блоке MSPayload начального значения BlockData <Adc_Interface> adcbuffer = new BlockData <Adc_Interface>(); // экземпляр данных adc в блоке event BlockData <Tdc_Interface> tdcbuffer = new BlockData <Tdc_Interface>(); // экземпляр данных tdc в блоке event while (pospl != pos + EvLeng + 12) // Цикл на чтение Data Block ( пока позиция в блоке Data block не в конце блока Data block) { DataPLLeng = Byte2Int(ReadBytes(pospl + 2, 2, fs)); //Чтение длины DataPayload switch ((Byte2Int(ReadBytes(pospl, 1, fs))) >> 4) // Проверка типа DataPayload ( 0 TDC, 1 ADC) { case 0: { pospl += 4; //переход на новую строку for (int i = 0; i < DataPLLeng / 4; i++) // Чтение данных с Data Block { switch (Byte2Int(ReadBytes(pospl, 1, fs)) >> 4) // Проверка на тип Header записи TDC { case 2: { pospl += 4; break; } case 3: { pospl += 4; break; } case 4: { int ch = ((Byte2Int(ReadBytes(pospl, 4, fs))) << 7) >> 28; //чтение канала данных if (!IsNeedChannel(ch + 1, CChannel)) { break; //проверка нужды канала } uint value = (((Byte2uInt(ReadBytes(pospl, 4, fs))) << 11) >> 11) * 25; //чтение данных tdc if (inl_config) { //value += TQDC2Configs.Inl[2][12]; } tdcbuffer.Newrecord(ch, new Tdc_Interface(LEADING_FRONT, value)); //Запись данных в блок данных tdc pospl += 4; break; } case 5: { int ch = ((Byte2Int(ReadBytes(pospl, 4, fs))) << 7) >> 28; //чтение канала данных if (!IsNeedChannel(ch + 1, CChannel)) { break; //проверка нужды канала } uint value = (((Byte2uInt(ReadBytes(pospl, 4, fs))) << 11) >> 11) * 25; //чтение данных tdc tdcbuffer.Newrecord(ch, new Tdc_Interface(TRAILING_FRONT, value)); //Запись данных в блок данных tdc pospl += 4; break; } case 7: { pospl += 4; break; } } } break; } case 1: { int ch = (int)(((Byte2Int(ReadBytes(pospl, 1, fs))) << 28) >> 28); // Считываемый канал данных if (!IsNeedChannel(ch + 1, CChannel)) //проверка нужды канала { pospl = pospl + DataPLLeng + 4; break; } long apospl = pospl; // Запись положения Header ADC pospl += 4; //переход на новую строку if (pospl == apospl + DataPLLeng) { pospl += 4; break; } // Проверка на отсуствие данных в Data Block while (pospl != apospl + DataPLLeng + 4) // Цикл на чтение данных ADC (пока позиция в блоке Data Block не в конце блока ADC) { List <int> buf = new List <int>(); //Массив для sample adc uint DataLen = Byte2uInt(ReadBytes(pospl, 2, fs)); //Длина в блоке ADC в байтах bool odd = false; // переменная четности количества данных ( в строках 32 байта) uint timestamp = Byte2uInt(ReadBytes(pospl + 2, 2, fs)) * 8; //чтение метки времени pospl += 4; if (DataLen % 4 != 0) // проверка на нечетность { odd = true; } for (uint i = 0; i < ((DataLen / 4) * 4 == DataLen ? (DataLen / 4) : (DataLen / 4) + 1); i++) //цикл на чтение Sample ADC { buf.Add(TQDC2Configs.ChGain[ch] ? (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) + (int)TQDC2Configs.X4[ch]) : (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) + (int)TQDC2Configs.X1[ch])); // Запись первого Sample в лист if (odd & i == (DataLen / 4)) // если данные нечетные и последняя строка данных, то последнее 16 битный sample не читается { } else { buf.Add(TQDC2Configs.ChGain[ch] ? (Byte2Sample(ReadBytes(pospl, 2, fs)) + (int)TQDC2Configs.X4[ch]) : (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) + (int)TQDC2Configs.X1[ch])); // Запись второго Sample в лист } pospl += 4; //переход на новую строку } adcbuffer.Newrecord(ch, new Adc_Interface(buf, timestamp)); // Чтение временной метки ADC в нС //pospl += 4; //переход на новую строку } break; } } } AddRecordCalc(buferfiledata, tdcbuffer, adcbuffer); // запись данных event в блок вычисленных данных WriteFileCalc(buferfiledata, writer, StartTimeStampnSec); //запись в файл prog += EvLeng + 12; //Повышение позиции для Progress Bar pos = pos + EvLeng + 12; // Запись новой позиции в файле ProgressBar.ReportProgress((int)NumEv, adcbuffer); // Возращение прогресса в BackgroundWorker ProgressBar ( повышение строки прогресса в окне) if (ProgressBar.CancellationPending == true) { fs.Close(); //Закрытие чтение CloseCsv(); //и записи return; } } } calculationresult = new BackGroundWorkerResult(CALCULATION, 100, OK); e.Result = calculationresult; //Возращение переменной для различия процесса fs.Close(); //Закрытие чтение CloseCsv(); //и записи }
public static void StartDecodingText(BackgroundWorker ProgressBar, DoWorkEventArgs e) { if (Create_CSV("Summary") != DialogResult.OK) // Создание файла CSV проверка на отмену) { return; } InitCsv(); //ulong NumEv; // Номер Event string date = ""; // Дата int NumEv = 0; // Позициця для Progress Bar int NumCircleNumEvent = 0; // Количество кругов Event var fs = new FileStream(String.Format("{0}", ReadFilePath), FileMode.Open); // Экземпляр потока чтения var fsr = new StreamReader(fs); string readerLine = ""; using (writer) { writer.WriteLine("Event;Timestamp;Channel;Type Data;Data"); writer.WriteLine("№;Время(ns);;Тип данных;"); readerLine = fsr.ReadLine(); while (!fsr.EndOfStream) { BlockData <Adc_Interface> adcbuffer = new BlockData <Adc_Interface>(); // экземпляр данных adc в блоке event BlockData <Tdc_Interface> tdcbuffer = new BlockData <Tdc_Interface>(); // экземпляр данных tdc в блоке event if (readerLine.Substring(0, 3) == "Ev:") { readerLine = readerLine.Substring(4); if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = int.Parse(readerLine.Substring(0, readerLine.IndexOf(" "))) + 16777215 * NumCircleNumEvent; readerLine = readerLine.Substring(readerLine.IndexOf(' ') + 1); date = UnixTimeStampToDateTime(uint.Parse(readerLine.Substring(readerLine.IndexOf(" ") + 1, readerLine.IndexOf('.') - 2 - readerLine.IndexOf(" ") + 1))).ToString(); // Чтение даты и времени глобального Event и конвертация из unix в стандратный вид readerLine = readerLine.Substring(readerLine.IndexOf('.') + 1); date += ":" + readerLine.ToString(); // добавление к дате времени в нс bool isenddata = false; while (!isenddata) { readerLine = fsr.ReadLine(); if (readerLine is null) { break; } switch (readerLine.Substring(0, 3)) { case "Tdc": { readerLine = readerLine.Substring(4); int ch = int.Parse(readerLine.Substring(0, readerLine.IndexOf(':'))) + 1; //Добавление канала, данных uint value = uint.Parse(readerLine.Substring(readerLine.IndexOf(": ") + 2)) * 25; //и типа данных в блок данных tdcbuffer.Newrecord(ch - 1, new Tdc_Interface(LEADING_FRONT, value)); //writer.WriteLine(string.Format(";;{0};TDC;{1}", ch, value)); break; } case "Adc": { readerLine = readerLine.Substring(4); int ch = int.Parse(readerLine.Substring(0, readerLine.IndexOf(':'))) + 1; //Добавление канала, данных uint timestamp = uint.Parse(readerLine.Substring(readerLine.IndexOf(": ") + 1, readerLine.IndexOf(';') - (readerLine.IndexOf(": ") + 1))) * 8; writer.Write(string.Format(";{0};{1};ADC;", timestamp, ch)); readerLine = readerLine.Substring(readerLine.IndexOf(';') + 2); List <int> databuf = new List <int>(); // Буфер для данных ADC while (true) { try { databuf.Add(int.Parse(readerLine.Substring(0, readerLine.IndexOf(' ')))); readerLine = readerLine.Substring(readerLine.IndexOf(' ') + 1); } catch { databuf.Add(int.Parse(readerLine)); break; } } adcbuffer.Newrecord(ch - 1, new Adc_Interface(databuf, timestamp)); // Чтение временной метки ADC в нС //writer.WriteLine(databuf); break; } case "Ev:": { isenddata = true; break; } } } } WriteFileDec(tdcbuffer, adcbuffer, writer, date, NumEv); //запись в файл ProgressBar.ReportProgress((int)NumEv, adcbuffer); // Возращение прогресса в BackgroundWorker ProgressBar ( повышение строки прогресса в окне) if (ProgressBar.CancellationPending == true) { fs.Close(); //Закрытие чтение CloseCsv(); //и записи return; } } } BackGroundWorkerResult calculationresult = new BackGroundWorkerResult(DECODER, 100, OK); e.Result = calculationresult; //Возращение переменной для различия процесса CloseCsv(); // закрытие потока записи fs.Close(); // закрытие потока чтения }
public static void StartDecodingBinary(BackgroundWorker ProgressBar, DoWorkEventArgs e) //функция декодирования (1 - экземпляр класса BGW, в котором была запущена функция { // 2 - аргумент для хранения результата BGW if (Create_CSV("Decoded") != DialogResult.OK) // Создание файла CSV проверка на отмену) { return; } InitCsv(); // Инициирование экземпляров записи int EvLeng; // Длина глобального Event в байтах int MSLeng; // Длина блока MStream int DataPLLeng; // Длина блока DataPayload int NumEv = 0; // Номер Event string date; // Дата long pos = 0; // Позиция в блоке файла long pospl; // Позиция в блоке DataPayload int NumCircleNumEvent = 0; // Количество кругов Event var fs = new FileStream(String.Format("{0}", ReadFilePath), FileMode.Open); // Экземпляр потока чтения using (writer) // поток для записи { writer.WriteLine("Event;Timestamp;Channel;Type Data;Data"); writer.WriteLine("№;Время(ns);;Тип данных;"); while (pos < fs.Length) // Главный цикл (пока позиция в блоке Event меньше длины файла в байтах) { EvLeng = Byte2Int(ReadBytes(pos + 4, 4, fs)); //Чтение длины Event if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = Byte2Int(ReadBytes(pos + 8, 4, fs)) + 16777215 * NumCircleNumEvent; // Номер Event MSLeng = Byte2Int(ReadBytes(pos + 21, 3, fs)) >> 2; // Чтение длины блока MStream date = UnixTimeStampToDateTime(Byte2uInt(ReadBytes(pos + 24, 4, fs))).ToString(); // Чтение даты и времени глобального Event и конвертация из unix в стандратный вид date += ":" + (Byte2uInt(ReadBytes(pos + 28, 4, fs)) >> 2).ToString(); // добавление к дате времени в нс pospl = pos + 32; // присваивание поцизии в блоке MSPayload начального значения BlockData <Adc_Interface> adcbuffer = new BlockData <Adc_Interface>(); // экземпляр данных adc в блоке event BlockData <Tdc_Interface> tdcbuffer = new BlockData <Tdc_Interface>(); // экземпляр данных tdc в блоке event while (pospl != pos + EvLeng + 12) // Цикл на чтение Data Block ( пока позиция в блоке Data block не в конце блока Data block) { DataPLLeng = Byte2Int(ReadBytes(pospl + 2, 2, fs)); //Чтение длины DataPayload switch ((Byte2Int(ReadBytes(pospl, 1, fs))) >> 4) // Проверка типа DataPayload ( 0 TDC, 1 ADC) { case 0: //TDC { pospl += 4; //переход на новую строку for (int i = 0; i < DataPLLeng / 4; i++) // Чтение данных с Data Block { switch (Byte2Int(ReadBytes(pospl, 1, fs)) >> 4) // Проверка на тип Header записи TDC { case 2: //TDC event header { //uint TimeStamp = ((Byte2uInt(ReadBytes(pospl + 2, 2, FS)) << 4) >> 4) * 25; // Чтение временной метки TDC pospl += 4; //переход на новую строку break; } case 3: //TDC event trailer { pospl += 4; //переход на новую строку break; } case 4: //TDC data, leading edge { int ch = (((Byte2Int(ReadBytes(pospl, 4, fs))) << 7) >> 28) + 1; // Считываемый канал данных if (!IsNeedChannel(ch, DChannel)) //проверка на нужду записанного канала { pospl += 4; break; } uint value = (((Byte2uInt(ReadBytes(pospl, 4, fs))) << 11) >> 11) * 25; // Значение TDC с канала #ch tdcbuffer.Newrecord(ch - 1, new Tdc_Interface(LEADING_FRONT, value)); pospl += 4; //переход на новую строку break; } case 5: //TDC data, trailing edge { int ch = (((Byte2Int(ReadBytes(pospl, 4, fs))) << 7) >> 28) + 1; // Считываемый канал данных if (!IsNeedChannel(ch, DChannel)) //проверка на нужду записанного канала { pospl += 4; break; } uint value = (((Byte2uInt(ReadBytes(pospl, 4, fs))) << 11) >> 11) * 25; // Значение TDC с канала #ch tdcbuffer.Newrecord(ch - 1, new Tdc_Interface(TRAILING_FRONT, value)); pospl += 4; //переход на новую строку break; } case 7: //TDC Error { pospl += 4; //переход на новую строку break; } } } break; } case 1: //ADC { int ch = (((Byte2Int(ReadBytes(pospl, 1, fs))) << 28) >> 28) + 1; // Считываемый канал данных if (!IsNeedChannel(ch, DChannel)) { pospl = pospl + DataPLLeng + 4; break; } //AddData(CHANNEL, ch.ToString()); //Запись канала в блок данных long apospl = pospl; // Запись положения Header ADC pospl += 4; //переход на новую строку if (pospl == apospl + DataPLLeng) { pospl += 4; break; } // Проверка на отсуствие данных в Data Block while (pospl != apospl + DataPLLeng + 4) // Цикл на чтение данных ADC (пока позиция в блоке Data Block не в конце блока ADC) { List <int> databuf = new List <int>(); // Буфер для данных ADC uint dataLen = Byte2uInt(ReadBytes(pospl, 2, fs)); //Длина в блоке ADC в байтах bool odd = false; // переменная четности количества данных ( в строках 32 байта) if (dataLen % 4 != 0) // проверка на нечетность { odd = true; } uint timestamp = Byte2uInt(ReadBytes(pospl + 2, 2, fs)) * 8; // Чтение временной метки ADC pospl += 4; //переход на новую строку for (uint i = 0; i < ((dataLen / 4) * 4 == dataLen ? (dataLen / 4) : (dataLen / 4) + 1); i++) //цикл на чтение Sample ADC { databuf.Add(TQDC2Configs.ChGain[ch - 1] ? (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) - (int)TQDC2Configs.X4[ch - 1]) : (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) - (int)TQDC2Configs.X1[ch - 1])); // Запись первого Sample в лист if (odd & i == (dataLen / 4)) // если данные нечетные и последняя строка данных, то последнее 16 битный sample не читается { } else { databuf.Add(TQDC2Configs.ChGain[ch - 1] ? (Byte2Sample(ReadBytes(pospl, 2, fs)) - (int)TQDC2Configs.X4[ch - 1]) : (Byte2Sample(ReadBytes(pospl + 2, 2, fs)) - (int)TQDC2Configs.X1[ch - 1])); // Запись второго Sample в лист } pospl += 4; //переход на новую строку } adcbuffer.Newrecord(ch - 1, new Adc_Interface(databuf, timestamp)); // Чтение временной метки ADC в нС } break; } } } WriteFileDec(tdcbuffer, adcbuffer, writer, date, NumEv); //запись в файл pos = pos + EvLeng + 12; // Запись новой позиции в файле ProgressBar.ReportProgress((int)NumEv, adcbuffer); // Возращение прогресса в BackgroundWorker ProgressBar ( повышение строки прогресса в окне) if (ProgressBar.CancellationPending == true) { fs.Close(); //Закрытие чтение CloseCsv(); //и записи return; } } } BackGroundWorkerResult calculationresult = new BackGroundWorkerResult(DECODER, 100, OK); e.Result = calculationresult; //Возращение переменной для различия процесса CloseCsv(); // закрытие потока записи fs.Close(); // закрытие потока чтения }
public static void AnChannelText(BackgroundWorker ProgressBar, DoWorkEventArgs e) { int NumCircleNumEvent = 0; // Количество кругов Event var fs = new FileStream(string.Format("{0}", ReadFilePath), FileMode.Open); // Экземпляр потока чтения var fsr = new StreamReader(fs); BackGroundWorkerResult analysisresult; while (!fsr.EndOfStream) { string readerLine = fsr.ReadLine(); switch (readerLine.Substring(0, readerLine.IndexOf(" "))) { case "Ev:": { readerLine = readerLine.Substring(readerLine.IndexOf(" ")); readerLine = readerLine.Remove(0, 1); if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = int.Parse(readerLine.Substring(0, readerLine.IndexOf(" "))) + 16777215 * NumCircleNumEvent; break; } case "Tdc": { readerLine = readerLine.Substring(readerLine.IndexOf(" ")); readerLine = readerLine.Remove(0, 1); uint ch = uint.Parse(readerLine.Substring(0, readerLine.IndexOf(":"))); if (Channel[ch] == false) { Channel[ch] = true; NumCh++; } break; } case "Adc": { readerLine = readerLine.Substring(readerLine.IndexOf(" ")); readerLine = readerLine.Remove(0, 1); uint ch = uint.Parse(readerLine.Substring(0, readerLine.IndexOf(":"))); if (Channel[ch] == false) { Channel[ch] = true; NumCh++; } break; } } ProgressBar.ReportProgress((int)((fs.Position * 10000) / fs.Length)); if (ProgressBar.CancellationPending == true) { fsr.Close(); fs.Close(); return; } } analysisresult = new BackGroundWorkerResult(ANALYS, 100, OK); e.Result = analysisresult; //Возращение переменной для различия процесса fsr.Close(); fs.Close(); }
public static void AnChannelBinary(BackgroundWorker ProgressBar, DoWorkEventArgs e) { int EvLeng; int PLLeng; long pos = 0; long pospl; long prog; int NumCircleNumEvent = 0; // Количество кругов Event var fs = new FileStream(String.Format("{0}", TQDC2File.ReadFilePath), FileMode.Open); BackGroundWorkerResult analysisresult; //long prog_st = 0; while (pos < fs.Length) { EvLeng = Byte2Int(ReadBytes(pos + 4, 4, fs)); if (NumEv == 16777215 + 16777215 * NumCircleNumEvent) { NumCircleNumEvent++; } NumEv = Byte2Int(ReadBytes(pos + 8, 4, fs)) + 16777215 * NumCircleNumEvent; pospl = pos + 32; while (pospl != pos + EvLeng + 12) { PLLeng = Byte2Int(ReadBytes(pospl + 2, 2, fs)); switch ((Byte2Int(ReadBytes(pospl, 1, fs))) >> 4) { case 0: { pospl += 4; for (int i = 0; i < PLLeng / 4; i++) { if ((Byte2Int(ReadBytes(pospl, 1, fs)) >> 4 == 4) | (Byte2Int(ReadBytes(pospl, 1, fs)) >> 4 == 5)) { uint ch = (Byte2uInt(ReadBytes(pospl, 4, fs)) << 7) >> 28; if (Channel[ch] == false) { Channel[ch] = true; NumCh++; } } pospl += 4; } break; } case 1: { uint ch = ((Byte2uInt(ReadBytes(pospl, 1, fs))) << 28) >> 28; if (Channel[ch] == false) { Channel[ch] = true; NumCh++; } pospl += Byte2Int(ReadBytes(pospl + 2, 2, fs)) + 4; break; } } } //prog += EvLeng + 12; pos = pos + EvLeng + 12; prog = ((fs.Position * 10000) / fs.Length); ProgressBar.ReportProgress((int)prog); if (ProgressBar.CancellationPending == true) { fs.Close(); return; } } analysisresult = new BackGroundWorkerResult(ANALYS, 100, OK); e.Result = analysisresult; //Возращение переменной для различия процесса fs.Close(); }