C#でチャットクライアント/サーバーアプリを作成していますが、スレッド化に問題があります。私は自分の問題を示すためにこの簡単なコードを書きました。
フォームを表示するためにthread_1を使用しましたが、1秒だけ表示されます(thread_1が終了してフォームを閉じた可能性がありますが、IsAliveは生きていると言っています!)。Thread_2は、メインスレッドで作成されたtexBoxに到達しようとしますが、次のように表示されます。
「クロススレッド操作が無効です:作成されたスレッド以外のスレッドからアクセスされたコントロール'textBox2'。」
最初の問題を解決する方法がわかりませんが、BackgroundWorkerで2番目の問題を解決しましたが、スレッドで解決するのが好きです。方法はありますか?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Thread t1;
Thread t2;
private void button1_Click(object sender, EventArgs e)
{
t1 = new Thread(doThread1);
t1.Name = "thread_1";
t2 = new Thread(doThread2);
t2.Name = "thread_2";
t1.Start();
t2.Start();
MessageBox.Show(t1.IsAlive.ToString());
}
private void doThread1()
{
Form frm2 = new Form();
frm2.Show();
}
private void doThread2()
{
try
{
for (int j = 10000; j > 0; j--)
textBox.Text = j.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}