Работа с потоками - C# (181843)
Формулировка задачи:
Объясните мне мои ошибки и как их поправить(грузит ЦП и делает невозможным работу с GUI программы - лагает ужасно)
Есть некий класс, в котором происходит работа с потоками - выдержку я представлю ниже. Запускается он из основного потока, вызовом метода CreateThread.
Возможно, моя ошибка в методе обновления GUI. Как вы понимаете,после выполнения Check и Check2 появляются какие-то новые данные, которые я вношу в GUI через таймер, который запускается в самом начале с интервалом в 1000 мс(не из потока же его обноволять, ну). Но что-то я сомневаюсь, что моя проблема в таймере. Скорее всего, я просто неправильно работаю с потоками.
private Thread[] Threads; public void CreateThread() { try { Threads = new Thread[101]; for (int i = 0; i < 100; i++) { Threads[i] = new Thread(this.Worker); Threads[i].IsBackground = true; Threads[i].Start(); } } catch (Exception) { } } public void StopThreads() { try { for (int i = 0; i < 100; i++) { Threads[i].Abort(); } } catch (Exception) { } } public int AliveThreads() { try { int count = 0; for (int i = 0; i < 100; i++) { if (Threads[i].IsAlive) { count++; } } return count; } catch { return 0; } } void Worker() { while (SomeQueue1.Count != 0) { if (SomeQueue1.Count + 1 < AliveThreads() && SomeQueue2.Count+1 < AliveThreads()) { break; } string data = SomeQueue1.Dequeue(); try { Check(data); } catch (Exception) { SomeQueue.Enqueue(data); } if (SomeQueue2.Count != 0) { string datae = SomeQueue2.Dequeue(); try { Check2(datae); } catch (Exception) { SomeQueue2.Enqueue(datae); } } }
Решение задачи: «Работа с потоками»
textual
Листинг программы
private object ObjLock = new object(); void SendMsg(object data) { lock(ObjLock) { // Тут код отправки сообщения } } void Send (datas) { foreach(it in datas) { ThreadPool.QueueUserWorkItem(SendMsg, (object)it.dataSend); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д