Диспетчер потоков C # WinForms

#c# #.net #multithreading #winforms

#c# #.net #многопоточность #winforms

Вопрос:

Я хочу создать диспетчер потоков в своем C# WinForms приложении.

Вот как я добавляю новый поток:

 Thread thread = new Thread(delegate()
{
    Thread.Sleep(TimeSpan.FromSeconds(delay));

    //MY CODE

    RemoveCurrentThread();
});
threadArr.Add(thread);
thread.Start();
  

Вот как я удаляю поток:

 public void RemoveCurrentThread()
{
    if (threadArr.Contains(Thread.CurrentThread))
    {
        threadArr.Remove(Thread.CurrentThread);
    }
}
  

И иногда я хочу отменить весь запущенный поток, поэтому я использую:

 public void CancelAllThreads()
{
    if (threadArr.Count == 0)
        return;

    foreach (Thread item in threadArr)
    {
        if (item.IsAlive)
            item.Abort();
    }

    threadArr.Clear();
}
  

Проблема с этим кодом заключается в том, что все потоки создаются, а затем начинают ждать завершения задержки (у меня много потоков в приложении, и я боюсь, что это отнимает много ресурсов процессора у компьютера).
Есть какой-либо встроенный код для запуска потока после задержки в пару секунд?

Спасибо!

Комментарии:

1. Нитки. Sleep() не использует процессор, не волнуйтесь.

2. Пожалуйста, никогда не звоните Thread.Abort() , если вы не пытаетесь выйти из своего приложения. Это может привести к повреждению времени выполнения, и вы просто не сможете доверять правильному запуску вашего кода после этого.

3. Почему вы хотите это сделать? Что вы надеетесь, что потоки сделают для вас? Можете ли вы рассказать нам, что пытается сделать ваше приложение?

4. @Enigmativity Спасибо! итак, каково ваше предложение отменить запущенный поток?

5. @MTA — Вы не можете отменить запущенный поток. Вы можете только совместно уведомить поток, чтобы он мог завершиться естественным образом.