Работа с потоками - 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);
}
}