2011-08-09 3 views
0

スレッドパラメータを更新するには? String以来スレッドパラメータを更新する

string str = "hello world"; 

private static Thread test = newThread(new ParameterizedThreadStart(invariant_loop)); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    test.Start(str); 
} 

private static void invariant_loop(object value) 
{ 
    do 
    { 
     System.Threading.Thread.Sleep(1000); 
     Console.WriteLine(value.ToString()); 
    } 
    while (true); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    str = maskedTextBox1.Text; // update value ? 
} 

答えて

0

あなたは(パラメータを渡す)操作のような種類をやっていないことができ不変のデータ構造です。基本となる文字列フィールドを変更することが適切な方法でクラスによって他の参照型またはラップ文字列を使用します。

class TextWrapper 
{ 
    public string TextValue 
    { 
     get; 
     set; 
    } 
} 

はににTextWrapperのインスタンスをインスタンス化し、合格した後、あなたがstrを定義したレベルでのがTextWrapperフィールドを定義します。スレッド。

はヨーダにより、非常に良い記事を参照してください:Parameter passing in C#

0

代わりに前の回答には、この変数を渡さずに同じことを達成する必要があります。 競合状態を避けるために共有変数がロックされていることを確認してください。

string str = "hello world"; 
object str_lock = new object(); 

private Thread test = newThread(new ParameterizedThreadStart(invariant_loop)); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    test.Start(); 
} 

private void invariant_loop() 
{ 
    do 
    { 
     System.Threading.Thread.Sleep(1000); 
     lock(str_lock) { 
      Console.WriteLine(str); 
     } 
    } 
    while (true); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    lock(str_lock) { 
     str = maskedTextBox1.Text; 
    } 
} 
関連する問題