Почему в то время как цикл зависания
Привет
Когда я пытаюсь преобразовать текстовый файл он идет на более чем 2000 строк и зависает
можете ли вы объяснить, почему ?
Заранее спасибо
Аджит
Что я уже пробовал:
DateTime datetime; OpenFileDialog choofdlog = new OpenFileDialog(); choofdlog.Filter = "All Files (*.DAT)|*.DAT"; choofdlog.FilterIndex = 1; choofdlog.Multiselect = true; string cToken; string cToken1; string cToken2; string cTime; string cDate; string cIdno; int nRecnt = 0; DataTable userdt = new DataTable(); userdt = this.timeattDataSet.data ; if (choofdlog.ShowDialog() == DialogResult.OK) { foreach (string sFileName in choofdlog.FileNames) { using (FileStream fs = new FileStream(sFileName, FileMode.Open, FileAccess.Read)) { StreamReader sr = new StreamReader(fs); sr.BaseStream.Seek(0, SeekOrigin.Begin); string str = sr.ReadLine(); while (str != null) { // Console.WriteLine(str); str = sr.ReadLine(); if (str != null) { cToken1 = str.ToString().Substring(0, 9).Trim(); cToken2 = '5' + cToken1.PadLeft(5, '0'); cToken = cToken2.Substring(0, 6); cDate = str.ToString().Substring(10, 10); cTime = str.ToString().Substring(21, 2) + str.ToString().Substring(24, 2); cIdno = str.ToString().Substring(30, 1); datetime = System.Convert.ToDateTime(cDate); nRecnt = nRecnt + 1; this.textBox2.Text = nRecnt.ToString(); this.textBox2.Refresh(); string queryString = "Token_no = '" + cToken + "' AND Date = '" + datetime +"' AND Time ='" + cTime + "'"; bool rowExists = userdt.AsEnumerable().Any(row => string.Equals(row.Field<string>("Token_no"), cToken, StringComparison.OrdinalIgnoreCase) && row.Field<DateTime>("Date") == datetime && row.Field<string>("Time") == cTime); if (rowExists == false) { this.textBox1.Text = cToken + '-'+ datetime; this.textBox1.Refresh(); DataRow newCustomersRow = this.timeattDataSet.Tables["data"].NewRow(); newCustomersRow["Token_no"] = cToken; newCustomersRow["Date"] = datetime; newCustomersRow["Time"] = cTime; newCustomersRow["Terminal"] = cIdno; newCustomersRow["Mode"] = "T"; newCustomersRow["In_out"] = ""; newCustomersRow["Updated"] = false; } } else { break; } } sr.Close(); fs.Close(); } } }
ZurdoDev
Что значит "повесить трубку"?" Если вы имеете в виду, что пользовательский интерфейс перестает реагировать, то это потому, что вы делаете это в потоке пользовательского интерфейса, так что именно это и произойдет.
phil.o
Вы не должны вызывать метод ToString () для строковой переменной.
И если есть много файлов и/или у них есть много строк, то перемещение всего процесса в фоновый поток оставит ваш пользовательский интерфейс отзывчивым.