我有一個與設備一起工作的類,以避免在使用設備和串行端口時UI層出現延遲我使用了一個線程,但我的設備僅限於做一次一份工作。 所以,我有一個隊列,當用戶要求做任務被添加到它時,然後我運行一個線程來逐個完成任務。使用一個線程多次執行特定任務C#
每次用戶要求一個任務時,我會檢查線程是否正在運行,如果是,我只是將新任務添加到隊列中,如果沒有,我再次創建線程。這意味着每次隊列都變空時,我應該創建一個新線程。現在我想問問有沒有什麼方法可以重用該線程?由於我只需要一個線程來完成任務,使用線程池是個好主意?由於掛起是一種過時的方法,我不知道用戶什麼時候會要求另一個任務使用wait(),我可以掛起線程並以任何其他方式再次運行它嗎?或者最好再次創建線程,我正確地做對了嗎?
public class Modem
{
Thread thread;
Queue<Task> Tasks = new Queue<Task>();
public Modem()
{
}
public void DoTask(Task s)
{
Tasks.Enqueue(s);
if (thread == null || !thread.IsAlive)
thread = new Thread(HandleTasks);
}
private void HandleTasks()
{
while (Tasks.Count != 0)
SendTaskToModem(Tasks.Dequeue());
}
}
爲什麼寫自己的ThreadPool?該框架已經提供了一個。 – 2014-09-28 08:50:38
如何使用線程池來代替?聽起來像是你想要的。 – Automatico 2014-09-28 08:52:06
@HenkHolterman在多線程的情況下不是線程池有用嗎?我的意思是我不能運行更多的一個線程從隊列中選擇任務並將它們傳遞到調制解調器,實際上我需要一個線程來逐個完成任務!或者我誤解了threadpool? – 2014-09-28 08:58:15