Form的ShowDialog() 阻塞Or不阻塞?

zqcoder 2012-11-11 08:06:59
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
BackgroundWorker bgw = new BackgroundWorker();
private void button1_Click(object sender, EventArgs e)
{
bgw.RunWorkerAsync();
}

private void Form1_Load(object sender, EventArgs e)
{
bgw.WorkerReportsProgress = true;
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
label1.Text = "主窗体:线程ID" + Thread.CurrentThread.ManagedThreadId.ToString();
}

void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Form2 o = new Form2();
o.text = "当前线程ID:"+Thread.CurrentThread.ManagedThreadId.ToString();

o.ShowDialog();
}

void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int i = 0;
while (true)
{
bgw.ReportProgress(100, null);
Thread.Sleep(1000);
i++;
if (i > 10)
{
break;
}
}
}
}
}


bgw_ProgressChanged是在主线程被调用的,为什么能陆续弹出12个窗体,按道理ShowDialog应该阻塞线程啊
...全文
375 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2012-11-12
  • 打赏
  • 举报
回复
是不是因为事件是在Loaded中注册的,所以在Load的时候已经执行了事件。 你试着在changed里边注册DoWork
z821134886 2012-11-11
  • 打赏
  • 举报
回复
感觉代码有些乱,不过很实用

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧