Работа с потоками - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д