.Net frameworkのバージョンは1.1から2.0にアップして、仕様が変わるところが多いです。今回の例で言えば、他のスレッドから UI スレッドに対する操作のチェックは曖昧でしたが、2.0になって、このチェックは厳しくなってきて、完全にできなくなりました。
そこで、違うスレッドから、UI を更新するには、delegate を使う方法があります。
例
------------------------ Start -----------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// 追加
using System.Threading;
namespace lianxi
{
public partial class Form1 : Form
{
private delegate void MyDelegate(string s);
MyDelegate ShowMsg;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ShowMsg = new MyDelegate(OutputMsg);
Thread t1 = new Thread(new ThreadStart(run1));
t1.IsBackground = true;
t1.Start();
Thread t2 = new Thread(new ThreadStart(run2));
t2.IsBackground = true;
t2.Start();
}
private void run1()
{
while (true)
{
Thread.Sleep(500);
this.Invoke(ShowMsg, new object[] { "スレッド1です" });
}
}
private void run2()
{
while (true)
{
Thread.Sleep(800);
this.Invoke(ShowMsg, new object[] { "スレッド2です" });
}
}
private void OutputMsg(string s)
{
this.rtbox_show.AppendText(s + "\r\n");
}
}
}
------------------------ End ------------------------------------------