2014-01-08 4 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 
     } 

Примечание: пример кода выше, я хочу запустить метод NCMNAEConversion, основанный не на ncmList. Могут ли эти потоки работать одновременно?Запустить несколько потоков Одновременный

+1

Да, хотя нет чисто одновременными в компьютерах. Кстати, вы можете легко протестировать с помощью 'Console.WriteLine' из метода' NCMNAEConversion' – gdoron

+0

Предупреждение - вы захватываете переменную 'i' в ваших 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); 
}); 
Смежные вопросы