2014-01-08 81 views
2
private void button1_Click(object sender, EventArgs e) 
     { 
      List<string> ncmFile=new List<string>(); 
      ncmFile.Add("NCM1"); 
      ncmFile.Add("NCM2"); 

      List<string> naeFile = new List<string>(); 
      naeFile.Add("NAE1"); 
      naeFile.Add("NAE2"); 


      for (int i = 0; i < ncmFile.Count; i++) 
      { 
       Thread t = new Thread(new ThreadStart(()=>NCMNAEConversion(ncmFile[i], naeFile[i]))); 
       t.Start(); 
      } 
     } 

     public void NCMNAEConversion(string ncmFileName, string naeFile) 
     { 

      //conversion process 
     } 

注意:示例代码在上面,我想同时运行基于ncmList的NCMNAEConversion方法。这个线程同时运行吗?同时启动多个线程

+1

是,虽然有电脑没有纯粹的同步。顺便说一句,你可以使用'NCMNAEConversion'方法中的'Console.WriteLine'方便地测试 – gdoron

+0

警告 - 你正在捕获你的lambdas中的'i'变量 - 很可能多个线程实际上会使用相同的'我的价值(有些可能使用超出数组边界的值) –

回答

0

我建议使用ThreadPool来创建几个线程。

ThreadPool.QueueUserWorkItem(new WaitCallback(NCMNAEConversion), new string[]{ ncmFile[i], naeFile[i]}); 

public void NCMNAEConversion(object state) 
{ 
    //conversion process 
    string[] values = (string[])state; 
} 
1

考虑TPL,而不是由自己开始线程:

using System.Collections.Generic; 
using System.Threading.Tasks; 

List<string> ncmFile = new List<string>(); 
ncmFile.Add("NCM1"); 
ncmFile.Add("NCM2"); 

List<string> naeFile = new List<string>(); 
naeFile.Add("NAE1"); 
naeFile.Add("NAE2"); 

Parallel.For(0, ncmFile.Count, (i) => 
{ 
    string ncm = ncmFile[i]; 
    string nae = naeFile[i]; 
    NCMNAEConversion(ncm, nae); 
});