public void ShearchCompletedNow(List <ShearchItemClass> ShearchItemList, MyEventThreadFind c) { CountItemsUp = CountItemsUp + c.CountUp; if (c.EndWork) { ResultTimeStrim = ResultTimeStrim + c.NameThread + " время работы потока - " + c.TimeWork + " мс \r\n"; } }
public void OneShearchAddOk(MyEventThreadFind c) { if (c is MyEventThreadFind) { ItemListAdd.Add(c); CountItemsUp = CountItemsUp + c.CountUp; } }
private void ShearchStart() { int EndItem = First + Lenght; //int CountUp = 0; MyEventThreadFind e = new MyEventThreadFind(); e.NameThread = NameThread; e.Lenght = Lenght; e.First = First; e.EndWork = false; EndWork = false; e.CountUp = 0; e.TimeWork = 0; Stopwatch sw = new Stopwatch(); sw.Start(); if (EndItem > ArrayShearch.Count) { EndItem = ArrayShearch.Count; } for (int i = First; i < EndItem; i++) { int k = i; string s = ArrayShearch[k]; ShearchItemClass ShearchItem = ShearhFunc(s, ShearchString); e.CountUp++; if (ShearchItem.Distance <= Distance) { ShearchItem.IndexItem = k; ResultList.Add(ShearchItem); e.TimeWork = sw.ElapsedMilliseconds; e.ShearchItem = ShearchItem; e.IndexNow = k; MyEventThreadFind cc = new MyEventThreadFind(); cc.EndWork = e.EndWork; cc.First = e.First; cc.IndexNow = e.IndexNow; cc.Lenght = e.Lenght; cc.MyThread = e.MyThread; cc.NameThread = e.NameThread; cc.ShearchItem = e.ShearchItem; cc.TimeWork = e.TimeWork; cc.CountUp = e.CountUp; OneShearchAddNow?.Invoke(cc); e.CountUp = 0; Thread.Sleep(20); } } sw.Stop(); e.TimeWork = sw.ElapsedMilliseconds; e.EndWork = true; EndWork = true; ShearchCompletedNow?.Invoke(ResultList, e); Thread.Sleep(100); }
private void timer2_Tick(object sender, EventArgs e) { if ((int)timer2.Tag == ItemListAdd.Count) { int k = 0; for (int i = 0; i < ListThreadFind.Length; i++) { if (((ListThreadFind[i] is MyThreadFind) && (ListThreadFind[i].EndWork)) || (ListThreadFind[i] == null)) { k++; } } LogTextBox.AppendText(" работают-" + (ListThreadFind.Length - k) + " потоков\r\n"); if (k == ListThreadFind.Length) { stopwatchwork.Stop(); timer1.Start(); // запускаем таймер для сокрытия прогрессбара timer2.Stop(); // останавливаем таймер переноса данных в лист бокс TimeWorkStr.Text = "Время поиска " + stopwatchwork.ElapsedMilliseconds + " ms"; for (int i = 0; i < ItemListAdd.Count; i++) { if (ItemListAdd[i] is MyEventThreadFind) { LogTextBox.AppendText("№" + i + " " + ItemListAdd[i].ShearchItem + " Stream - " + ItemListAdd[i].NameThread + "\r\n"); } } LogTextBox.AppendText(ResultTimeStrim); File.WriteAllText(LogFileName.Text, LogTextBox.Text); ItemListAdd.Clear(); } } if (!((ItemListAdd.Count == 0) || (ItemListAdd.Count == (int)timer2.Tag))) { MyEventThreadFind c = ItemListAdd[(int)timer2.Tag]; if (c is MyEventThreadFind) { int len = TextRenderer.MeasureText(c.ShearchItem.ShearchString, ListData.Font).Width; if (LenCol < len) { LenCol = len + 10; } if ((int)timer2.Tag == 0) { ListData.Items.Add(c.ShearchItem); } else { bool insertOk = false; for (int i = 0; i < ListData.Items.Count; i++) { if ((ListData.Items[i] is ShearchItemClass) && (ListData.Items[i] as ShearchItemClass).IndexItem > c.IndexNow) { ListData.Items.Insert(i, c.ShearchItem); // if (c.NameThread == " Stream - 10") LogTextBox.AppendText(c.NameThread + " insert - " + c.ShearchItem + "\r\n"); insertOk = true; break; } } if (!insertOk) { ListData.Items.Add(c.ShearchItem); //if (c.NameThread == " Stream - 10") LogTextBox.AppendText(c.NameThread + " Add - " + c.ShearchItem + "\r\n"); } } } timer2.Tag = (int)timer2.Tag + 1; if (CountItemsUp == 0) { progressBar1.Value = progressBar1.Maximum; } else { progressBar1.Value = progressBar1.Value + CountItemsUp; } CountItemsUp = 0; } }