具有后台进程的线程不是并行调用

时间:2015-08-20 10:16:06

标签: c# multithreading

在我的应用程序中,我使用多线程与后台进程,但该方法是逐个线程调用。

例如,线程1首先调用,然后是线程2.请在下面找到我的代码:

for (int x = 0; x < TotalThread; x++) 
{
    if (x == TotalThread - 1) limit = limit + reminder;
    List < NumberList > _Elements = nList.GetRange(offset, limit);
    Threads[x] = new Thread(() = > ProcessSMSBody(_Elements));
    Threads[x].IsBackground = true;
    Threads[x].Name = string.Format("MyThread{0}", x);
    offset = offset + limit;
    Threads[x].Start();
} 

然后它调用Process SMS正文,代码如下:

private void ProcessSMSBody(List < NumberList > slsList) 
{
    string number, id, msg = "";
    if (slsList.Count > 0) 
    {
        for (int i = 0; i < slsList.Count; i++) 
        {
            locker.WaitOne();
            SrcNumberList rec = new SrcNumberList();
            Invoke(new Action(() = > rec = LowCountNumber()));
            Random rnd = new Random();
            number = rec.SrcNumber;
            id = rec.SrcNumberId;
            Invoke(new Action(() = > msg = spintax(rnd, txtMSG.Text, slsList[i].Name.ToString())));
            //MessageBox.Show(msg);
            Invoke(new Action(() = > IsendSMS(number, slsList[i].Phone.ToString(), msg, id)));
            Thread.Sleep(100);
        }
    }
}   

所有过程都是逐一完成的....任何建议请...

2 个答案:

答案 0 :(得分:1)

我同意上述评论。我建议改写使用Data Parallelism

using System.Threading.Tasks.Parallel;

Parallel.ForEach(nlist, e => ProcessSMSBody(e));

void ProcessSMSBody(X sms)
{
   // do the work
}

答案 1 :(得分:-1)

感谢所有人,我已经解决了这个问题......实际上,我正在调用该过程,它正在逐个调用该方法。所以,我做的只是创建对象并通过线程调用。现在,它调用并行并且线程正常工作。