■No55042 (Hongliang さん) に返信 > 同一スレッドですよ。 > ただ、MessageBox.Show がダイアログを閉じるまで返ってこないからと言って他の処理がすべてブロックされるわけではありません。 > Paint イベントも UI スレッドで動きます。もしメッセージボックスの表示中にスレッドが占有されるなら、Paint イベントを起こせなくなりますよね? そうなると表示元のフォームは画面更新できず、メッセージボックスを掴んで動かしたらあっという間に表示がぼろぼろになるはずですが、実際にはそんなことありません。 マサヤさん、 Hongliangさん、回答ありがとうございます。 >もしメッセージボックスの表示中にスレッドが占有されるなら、Paint イベントを起こせなくなりますよね? さきほどの実験2の中の、別フォームのLoadイベントに永久ループをいれたところ、確かにコンソール出力はなくなりました。 Windows.Forms.Timerでなく、Threadタイマにしたらどうなるか興味が湧いてきたので、また試してみます。 Threadタイマは別スレッドなので、おそらくApplication.DoEvents();がなくてもコンソール出力はされるのでは?と予想します。 public partial class aaa : Form { public aaa() { InitializeComponent(); } private void aaa_Load(object sender, EventArgs e) { while (true) { //Application.DoEvents(); //これを有効にすると、占有を逃れられるためコンソール出力はされる } } }
- Child Tree -