多线程所有线程都已启动,但只有一个线程在后台执行其工作

时间:2018-03-31 11:50:42

标签: c# multithreading thread-sleep

我在iis应用程序中有一个基于事件的场景(c#)。我想在事件发生时启动线程并在后台然后线程完成它们的工作。我的问题是在某些情况下只有一个线程正在工作。当我检查时线程状态所有线程看起来开始。据我所知,如果一个线程完成工作并睡眠,另一个线程也是睡眠和等待。我怎样才能解决这个多线程问题?我希望我的所有线程都在后台工作。当事件发生时每个相关的线程都是工作,并且彼此独立地再次睡觉。

在应用程序中,立即调用ProcessMyMessages()。所有应用程序生命周期线程都在后台工作

.................

public void ProcessMyMessages() { 
    Dictionary<string,string> messages=new Dictionary<string,string>();
     messages.Add("message1","value1"); 
     messages.Add("message2","value2");
    foreach(var item in messages)
    {
    StartMessageExecuter(message,value);
    }
        }

public void StartMessageExecuter(string message,string value)
{
Thread t=new Thread(()=>ExecuteMessage(message,value));
t.IsBackground=true;
t.Start();
}

 internal void ExecuteMessage(string message,string value)
{
ThreadMessage m=new ThreadMessage();
m.ProcessMessage(message,value);
}
.....
public class ThreadMessage
{
private AutoResetEvent receiveCompleteEvent=null;

public void ProcessMessage(string message,string value)
{
using(receiveCompleteEvent=new AutoResetEvent(false))
{
DoJob(message,value);
receiveCompleteEvent.WaitOne();
}
}

public DoJob(string message,string value)
{
//Here is event base if message is comming then executed
}
}

0 个答案:

没有答案