private void CmdFind_OnClick(object sender, RoutedEventArgs e) { if (!(int.TryParse(txtStart.Text, out startnumber)) || startnumber < 2 || !(int.TryParse(txtStop.Text, out finishnumber))) { MessageBox.Show("Введите целое число БОЛЬШЕ ИЛИ РАВНО 2"); } else { cmdFind.IsEnabled = false; cmdFind.Content = "Подождите"; } int tempend; if ((finishnumber - startnumber) % 2 == 0) { tempend = (finishnumber - startnumber) / 2; } else { tempend = (finishnumber - startnumber) / 2 + 1; } int tempstart = tempend; Thread[] threads = new Thread[2]; for (int i = 0; i < threads.Length; i++) { if (i > 0) { StartEnd se = new StartEnd(tempstart, (i + 1) * tempend); threads[i] = new Thread(FindSimple); threads[i].Start(se); } else { StartEnd se = new StartEnd(startnumber, (i + 1) * tempend); threads[i] = new Thread(FindSimple); threads[i].Start(se); } } }
private void FindSimple(object end) { mutexObj.WaitOne(); StartEnd endn = (StartEnd)end; for (int i = endn.start; i <= endn.end; i++) { bool b = true; for (int j = endn.start; j < i; j++) { if (i % j == 0 & i % 1 == 0) { b = false; } } if (b) { SimpleNumbers += $"{i}, "; } } mutexObj.ReleaseMutex(); }