在我的应用程序中,我使用多线程与后台进程,但该方法是逐个线程调用。
例如,线程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);
}
}
}
所有过程都是逐一完成的....任何建议请...
答案 0 :(得分:1)
我同意上述评论。我建议改写使用Data Parallelism
using System.Threading.Tasks.Parallel;
Parallel.ForEach(nlist, e => ProcessSMSBody(e));
void ProcessSMSBody(X sms)
{
// do the work
}
答案 1 :(得分:-1)
感谢所有人,我已经解决了这个问题......实际上,我正在调用该过程,它正在逐个调用该方法。所以,我做的只是创建对象并通过线程调用。现在,它调用并行并且线程正常工作。