2012-01-04 2 views
1

Рассмотрим следующий пример, взятый из http://www.albahari.com/threading/:HelloWorld Многопоточный C# приложение

using System; 
using System.Threading; 
class ThreadTest 
{ 
    static void Main() 
    { 
    Thread t = new Thread (WriteY);   // Kick off a new thread 
    t.Start();        // running WriteY() 

    // Simultaneously, do something on the main thread. 
    for (int i = 0; i < 1000; i++) Console.Write ("x"); 
    } 

    static void WriteY() 
    { 
    for (int i = 0; i < 1000; i++) Console.Write ("y"); 
    } 
} 

Как изменить код, чтобы WriteY(), чтобы принять строку параметров, так что я могу иметь одну нить пропуск «х» и один проход «y»?

ответ

2
using System; 
using System.Threading; 


public class ThreadTest { 

    public static void Main() { 

     Thread t=new Thread(WriteString); 
     t.Start("y"); 
     Thread u=new Thread(WriteString); 
     u.Start("x"); 

     t.Join(); 
     u.Join(); 

    } 

    public static void WriteString (Object o) { 

     for (Int32 i=0;i<1000;++i) Console.Write((String)o); 

    } 

} 
+0

Почему метод JOIN необходим для вашего подхода, а не подходом Lamba? – ChadD

+0

Это не «необходимо», я просто предпочитаю, чтобы мои потоки вышли, прежде чем выпустить «Главная». –

+0

@RobertAllanHenniganLeahy Я был заинтересован в вашем ответе и просто использовал его, чтобы проверить его, но у меня есть следующий вопрос: как передать более одного параметра? скажем, я хотел пройти через число циклов, поэтому оно не фиксировано на 1000. Спасибо – harag

3

Попробуйте использовать лямбда-выражение:

class ThreadTest 
{ 
    static void Main() 
    { 
    Thread t = new Thread (() => Write("y"));   // Kick off a new thread 
    t.Start();        // running WriteY() 

    // Simultaneously, do something on the main thread. 
    Write("x"); 
    } 

    static void Write(string input) 
    { 
    for (int i = 0; i < 1000; i++) Console.Write (input); 
    } 
} 
1

В основном вам нужно сделать три изменения.

//1. change how the thread is started 
t.Start("y");        // running WriteY() 

//2.change how the signature of the method 
static void WriteY(object data) 
    { 
    //3. use the data parameter 
    for (int i = 0; i &lt; 1000; i++) Console.Write ((string) data); 
    } 
} 
Смежные вопросы